✔️ Runtime Data Area
JVM의 구조에서 메모리 영역으로 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역입니다.
Method Area, Heap Area, Stack Area, PC Register, Native Method Stack, Runtime Constant Pool로 나눌 수 있습니다.
📌 Method(Static) Area
모든 스레드가 공유하는 메모리 영역으로 JVM이 시작될 때 생성되고 JVM이 종료될 때까지 유지됩니다.
- 클래스와 인터페이스에 대한 Runtime Constant Pool
- 메서드와 필드
- static 변수
- 메서드 바이트 코드
이 영역은 JVM 벤더마다 다양한 형태로 구현할 수 있으며 Oracle JVM에서는 Permanent Area 라고도 불립니다.
Method Area에 대한 Garbage Collection 또한 JVM 벤더의 선택 사항입니다.
📌 Heap
프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 메모리 영역입니다.
- new 연산자를 통해 생성한 객체, 인스턴스, 배열
모든 스레드가 공유하는 영역이며 인스턴스 또는 객체를 저장하는 공간으로 Garbage Collection 대상이고
JVM 성능 등의 이슈에서 가장 많이 언급되는 공간으로 힙 구성 방식이나 GC 방법 등은 JVM 벤더의 재량입니다.
📌 Runtime Constant Pool
모든 스레드에서 공유하며 JVM 시작 시 생성되고 프로그램이 종료될 때까지 유지됩니다.
Method Area 영역에 포함되지만 독자적 중요성을 가지며 클래스 파일 constant_pool 테이블에 해당하는 영역입니다.
- 클래스와 인터페이스 상수
- 메서드와 필드에 대한 모든 레퍼런스
JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리 상 주소를 찾아 참조합니다.
📌 PC Register
각 스레드별로 생성되며 현재 스레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역입니다.
이것을 이용해서 스레드를 돌아가면서 수행할 수 있게 합니다.
📌 Stack Area
각 스레드별로 생성되며 선입후출(First In Last Out)구조로 {}나 메서드가 끝날 때까지 사용됩니다.
메서드 호출 시마다 하나의 스택 프레임이 생성되고 메서드가 종료되면 스택 프레임이 제거됩니다.
- 지역 변수 배열(Local Variable Array)
- 피연산자 스택(Operand Stack)
- 현재 실행 중인 메서드가 속한 클래스의 런타임 상수 풀에 대한 레퍼런스
예를 들어 Person p = new Person(); 에서 Person p는 스택 영역에 생성되고 new로 생성된 클래스의 인스턴스는 힙 영역에 생성되며 스택 영역에 생성된 p는 힙 영역에 생성된 객체의 주소를 갖고 있습니다.
📌 Native Method Stack
각 스레드별로 생성되며 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역입니다.
native interface 호출 시 생성되며 native interface 종료 시 제거됩니다.
- native 메서드의 매개변수, 지역변수 등을 바이트 코드로 저장
'📚 Study > JAVA' 카테고리의 다른 글
[JAVA] 객체지향개념1 (0) | 2022.04.30 |
---|---|
[JAVA] 변수, 타입, 형변환, 연산, 조건문&반복문, 배열 (0) | 2022.04.29 |
[JAVA] 가비지 컬렉션(Garbage Collection) (0) | 2022.04.27 |
[JAVA] 자바 가상 머신 JVM(Java Virtual Machine)이란? (0) | 2022.04.27 |
[JAVA] JVM? JRE? JDK? (0) | 2022.04.27 |