🏐Rumtime Data Areas
Runtime Data Areas 는 JVM 을 위해 OS로 부터 할당받은 메모리 영역이다.
🏀PC Register
- 1개의 thread 당 1개
- thread 가 시작할 때 실행
- Stack base 인 JVM 과 Register base 인 CPU 가 통신하기 위한 메모리 공간
Stack base vs Register base
🏀JVM Stack
- 1개의 thread 당 1개
- thread 가 시작할 때 실행
- 수행 정보를 기록하는 frame 을 저장
- thread 당 1개이기 때문에 동기화 이슈등의 문제 x
🥎Local Variable Section
Parameter 변수를 저장
🥎Operand Stack
연산을 할 때 이용하는 stack 영역
🥎Frame Data
종료, 예외 처리시 이용하는 데이터
🏀Native Method Stack
- JNI 수행 시 사용되는 stack
- 최근에는 JVM Stack 과 일원화 되는 추세이다
JNI(Java Native Interface)?
JVM 이 C, C++, 어셈블리어와 같은 언어들로 작성된 라이브러리들을 호출 또는 호출 당하도록 하는 프레임 워크
OS 와의 호환성을 위해 이용한다
🏀Method Areas
- 모든 스레드가 이용
- GC 의 타겟이 된다
- Load 된 Type 을 저장하는 논리적 메모리
- Type 의 bytecode, 변수, 상수, reference, method data 등을 저장한다
Type 에 대한 전반적인 정보.
- full name
- class or interface
- public, abstract, final 등의 modifier
- interface 인 경우 직접 link 되는 객체의 리스트
🥎Constant Pool
- 모든 Constant 정보
- type, field, method 로의 모든 Symbolic Reference
- 배열의 경우 index 호출을 통해 접근한다.
- 인스턴스 변수.
- field type
- field modifier (public, private, protected, static, final, volatile, transient)
- constructor 을 포함한 모든 method
- method name
- return type
- parameter count, type
- method modifier (public, private, protected, static, final, syncronized, native, abstract)
- method bytecode
- stack frame 의 operand stack 및 local variable section 크기
🥎Class Variable
- static 으로 선언 된 변수들
- 모든 인스턴스에 공유 인스턴스 없이 직접 접근 가능
- 메모리를 미리 할당받음
- final class 일시 constant pool 에 값을 복사
🥎Reference to Class Class Loader
Class 가 어떤 Class Loader가 Load 하였는가에 대한 정보.
🥎Reference to Class Class
java.lang.class 를 생성
🏀Heap
- 모든 스레드가 공유
- gc 의 타겟
- 정해진 구조가 없고, 각 Vendor 에서 독자적으로 구성