java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 세부 영역으로 구분해서 사용한다.

 

 

메모리 사용 영역

 

 

 메소드 영역 (Method Area)

 - 코드에서 사용되는 클래스들을 클래스 로더로 읽어 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류해서 저장.

 - 메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.

 

 

 힙 영역 (Heap Area)

 - 객체와 배열이 생성되는 영역이다.

 - JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

 - 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이를 쓰레기로 취급하고 Garbage Collector를 실행시켜 힙 영역에서 자동으로 제거한다.

 

 

 JVM 스택 영역 (JVM Stack Area)

 - 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.

 - 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메서드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.

 

 - 프레임 내부에는 로컬 변수 스택이 있는데 기본 타입(Primitive Type) 변수와 참조 타입(Reference Type) 변수가 추가(push)되거나 제거(pop)된다.

 - 최초로 변수에 값이 저장될 때, 로컬 변수 스택 영역에 변수가 생성된다.

 - 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.

 

 

 

 

출처 : 신용권, 「이것이 자바다」, 한빛미디어(2019), p140-p142

'교육 > Java' 카테고리의 다른 글

#119 Java 열거타입  (0) 2019.11.05
#117 Java 나만의 예외처리  (0) 2019.11.01
#116 Java 제네릭(Generic)  (0) 2019.10.31
#115 Java 복습 (기본형, 참조형, null, Collection)  (0) 2019.10.30
#113 Java MVC 패턴, model1과 model2  (0) 2019.10.28

+ Recent posts