Programming Language/Java

[JAVA] 메모리 사용 영역(Runtime Data Area)

BS Kwak 2020. 7. 2. 23:56

메모리 영역(Runtime Data Area)

1. 메소드(Method) 영역

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

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

 

2. 힙(Heap) 영역

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

 (객체 & 배열 : JVM 스택 영역의 변수나 다른 객체의 필드에서 참조)

- JVM은 Garbage Collector를 실행시켜 (참조하는 변수나 필드가 없는 의미 없는 객체를 쓰레기로 취급함)쓰레기 객체를 힙 영역에서 자동으로 제거

 

3. JVM 스택(Stack) 영역

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

- 메소드가 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)함

- 프레임 내부에는 로컬 변수 스택이 있는데, 기본타입변수나 참조 타입 변수가 push/pop됨