JVM 구조
JVM(Java Virtual Machine)의 구성은 다음과 같다.
- Class Loader(클래스 로더): .class파일을 로드하고 배치한다.
- Execution Engine(실행 엔진): 바이트코드를 기계가 수행할 수 있게 하며, 인터프리터와 JIT의 방식을 사용한다.
- Runtime Data Area: 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간
Runtime Data Area
- PC Register: Tread가 어떤 부분을 어떤 명령으로 실행해야할 지에 대한 기록을 하는 부분. 현재 수행중인 JVM명령의 주소를 갖는다.
- JVM Stack: 실행 과정에서 임시로 할당되었다가 메소드를 빠져나가면 소멸되는 데이터를 저장하기 위한 영역. 변수, 임시 데이터, 스레드나 메소드의 정보를 저장한다.
- Native method stack: JAVA 프로그램이 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행 시키는 영역
- Heap: 객체를 저장하는 가상메모리 공간.
- Method Area(Class Area, Static Area): 클래스 정보를 처음 메모리 공간에 올릴 떄 초기화되는 대상을 저장하기 위한 메모리 공간
Heap
Eden에서는 새로운 객체가 생성된다. JVM은 에덴을 여러 버퍼로 나누어 각 애플리케이션 스레드가 새 객체를 할당하는 구역으로 활용하도록 배포한다. Minor GC가 발생하게되면 Eden 영역에 존재하는 객체 중 사용하고 있는 객체는 Survivor 영역으로 옮겨지게된다. 반복되다 Survior영역이 차게되면 Suvivor 영역의 살아남은 객체를 다른 Suvivor영역으로 이동시키고 마지막에는 Old영역으로 옮겨지게 된다.
출처 및 참고