
JVM
- 클래스 로더: JVM내로 클래스를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
- 실행 엔진: 바이트 코드를 실행시키는 역할
- 인터프리터: 바이트 코드를 한줄 씩 실행합니다.
- JIT 컴파일러: 인터피르터 효율을 높이기 위한 컴파일러로 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러가 반복되는 코드를 네이티브 코드로 바꿔줍니다. 그 다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용합니다.
- GC(Garbage Collector): 가비지 컬렉터로 힙 영역에서 사용되지 않는 객체들을 제거하는 작업을 의미합니다.
- JNI(Java Native Interface): 자바 애플리케이션에서 C, C++, 어셈블리어로 작성된 함수를 사용할 수 있는 방법을 제공해줍니다. Native 키워드를 사용하여 메서드를 호출합니다. 대표적인 메서드는 Thread의 currentThread()입니다.
- Native Method Library: C, C++로 작성된 라이브러리 입니다.
Runtime Data Area
- The
pc
Register - Each Java Virtual Machine thread has its own
pc
(program counter) register - 어느 시점에라도 각 JVM thread 는 하나의 메서드를 실행하고 있음
- 그 메서드가
native
가 아니라면 pc 레지스터는 실행중인 JVM instruction의 주소를 가르킴 - 그 메서드가
native
라면pc
레지스터의 값은 정의되지 않음 - pc 레지스터는
returnAddress
혹은 platform의native pointer
를 담을 만큼 큼
- JVM Stack
- 모든 thread는 private 한
JVM stack
을 가진다. JVM stack
은 frames를 저장한다.JVM stack
은 contiguous 하게 저장될 필요는 없다.JVM stack
의 size는 설정으로 제한될 수 있으며 심지어 동적으로 변경하여 최소 사이즈를 가지게 할 수도 있다.JVM stack
이 터지면StackOverflowError
가 발생한다.JVM stack
을 동적으로 변경하여 확장하는 것을 시도하였으나 메모리가 부족한 경우OutOfMemoryError
가 발생한다.
- Heap
- JVM은 모든 JVM threads간에 공유되는
heap
을 하나 가진다. heap
은 run-time data 영역으로서 모든 class instances 와 arrays의 주소가 할당된다.heap
은 jvm start-up 단계에서 생성된다.- 객체의 heap저장 영역은 garbage collector 라고 불리는 automatic storage management system 에의해 reclaimed된다.
heap
의 메모리는 contiguous 할 필요 없다.heap
의 크기는 고정되어 있을 수 도 있고 동적으로 변경될 수도 있다.- gc와 같은 automatic storage management system이 감당할 수 없을 정도로 많은 computation을 요구하게 heap이 구성된다면 JVM은
OutOfMemoryError
을 던진다.
- Method Area
- JVM은 모든 JVM threads간에 공유되는 method area를 하나 가진다.
Method Area
에는 per-class structures가 저장된다.- run-time constant pool
- fields
- method data
- code for methods and construtors
Method Area
는 jvm start-up 단계에서 생성된다.Method Area
의 메모리는 contiguous 할 필요 없다.Method Area
의 크기는 고정되어 있을 수 도 있고 동적으로 변경될 수도 있다.- 할당 받은 메모리 요청에대해 memory를 제공할 수 없을때 JVM은
OutOfMemoryError
를 던진다.
- Run-time Constant Pool
run-time constant pool
은 per-class 혹은 per-interface인constant_pool
의 표현이다.- compile-time 에 알 수 있는 numeric literals 부터 run-time 에 resolve되어야하는 method 나 field에 대한 참조까지 처리한다.
- 전통적인 cs에서의 symbol table과 비슷한 역할을 한다.
- 각
run-time contant pool
은 JVM의 method area에 할당된다. run-time contant pool
은 class 혹은 interface의 생성시 만들어진다.- class 혹은 interface 를 생성할때 성생의
run-time constant pool
이 JVM method area에 이용가능한 것을 초과한다면 JVM은OutOfMemoryError
를 던진다.

- Native Method Stacks
- Native method 를 담기위한 stack이다.
- Native Method - 자바가 아닌 언어에서 제공되는 메소드 e.g. C,C++
- 일반적으로 JVM threads 별로 가지고 있으며 thread 의 생성, 소멸 시 함께 생성, 소멸됨

@) 참고 - 오라클 Run-time Data Areas