Java

[Java] JVM 메모리 구조

Hyeonni 2022. 9. 5. 09:33

저작자 :  본인

클래스는 method 영역에 저장되며, 클래스에 대한 참조변수는 stack 영역에 저장된다.

method영역은 static 영역으로도 불린다.

참조 변수는 실제 데이터 값을 저장하고 있는 것이 아니라 실제 데이터가 위치해 있는 heap 메모리 영역의 주소를 저장하는 변수이다.

생성자로 만들어진 인스턴스는 heap 메모리 영역에 들어가며 객체 내부에는 클래스의 멤버들이 위치하게 된다.

메서드는 특이하게 method 영역에 저장이 되고 힙 메모리 영역의 인스턴스의 메서드 영역에서는 클래스 영역의 주소만 저장하고 있다.

멤버 변수(필드)에 해당하는 인스턴스 변수는 힙 메모리 영역에 올라가므로 직접 초기화를 하지 않아도 된다. ⇒ 각 자료형의 기본으로 자동 초기화한다.

지역 변수는 stack 영역에 올라가서 선언 시에 반드시 초기화를 해야하며, 한 동안 사용되지 않는다면 가상 머신에 의해 자동으로 삭제된다.

static 키워드가 붙은 필드는 클래스 내부에 저장 공간을 가지고 있어 객체 생성 없이 바로 사용 가능하며 method 영역에 저장된다.

 

 

method 영역 stack 영역 heap 영역
클래스 정보
- 필드 정보 (필드 명, 데이터 타입, 접근 제어자 등)
- 메서드 정보 (메서드 바이트 코드 {메서드 명, 리턴 타입, 파라미터, 접근 제어자 등})
참조변수 인스턴스 (인스턴스 변수, method 주소 값)
static 멤버 지역 변수 배열
final 변수 인자 값  
  리턴 값 Garbage Collection이 일어나는 장소
  이너 클래스 전체