반응형
메모리 사용 영역
1. 메서드 영역
- 코드에서 사용되는 클래스들을 클래스 로더로 읽음
- 정적(static) 변수, 정적 메서드
- JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역
2. 힙 영역
- 객체와 배열이 생성되는 영역
- JVM 스택 영역의 변수나 다른 객체의 필드에서 참조
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 쓰레기로 취급하고, JVM은 GC를 실행시켜 힙 영역에서 자동으로 제거함
3. 스택 영역
- 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당됨
- 메서드를 호출할 때마다 프레임을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.
- 기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만, 참조 타입 변수는 값이 아니라 힙 영역이나 메소드 영역의 객체 주소를 가진다.
- 선언된 변수는 실행 순서에 따라 스택에 생성되고 소멸된다.
NullPointerException
- 참조 타입 변수 잘못 사용하면 발생
- 참조 타입 변수가 null을 가지고 있을 경우, 참조 타입 변수는 사용할 수 없음
- 참조 타입 변수 사용 → 객체 사용인데 참조할 객체가 없으므로 사용할 수 없음
String
- 자바는 문자열을 String 변수에 저장함
- 문자열을 String 변수에 저장한다는 말은 틀린 표현 → 문자열은 String 객체로 생성되고 변수는 String 객체를 참조함
아래 둘은 다른 주소를 가짐
String name = "이범진";
String name1= "자바";
자바는 문자열 리터럴이 동일하다면 String 객체를 공유한다.
String name1 = "이범진";
String name2 = "이범진";
new 연산자를 사용해 String 객체를 생성하면 다른 주소를 참조한다.
String name1 = new String("이범진");
String name2 = new String("이범진");
출처
https://sites.google.com/site/kingcallkorea/web/gyoyugq-a/javagibonmemoligujo
반응형
'Java' 카테고리의 다른 글
[Java] 상속, final, 자동 형변환 (0) | 2021.06.22 |
---|---|
[Java] 객체지향 프로그래밍(OOP)이란? (0) | 2021.06.22 |
[Java] 기본 타입과 참조 타입 (0) | 2021.06.21 |
[Java] JVM이란? (0) | 2021.06.21 |
[Java] Java의 특징 (0) | 2021.06.21 |