이것저것 다 개발

[Java] JVM (Java Virtual Machine) Runtime Data Area 본문

Java

[Java] JVM (Java Virtual Machine) Runtime Data Area

용용개발 2017. 12. 8. 18:15

Runtime Data Area란 JVM이 Program을 수행하기 위해 OS로 부터 할당받는 메모리 영역입니다.

Runtime이란 Class file을 실행하는 과정을 말하는데요.

Class file은 JVM이 읽을 수 있는 형태로 번역된 결과물 (Byte Code) 입니다.

이때 Class file은 Symbolic Reference만 가지고 있고 Runtime 시에 동적으로 Linking이 일어나게 됩니다.


Runtime Data Area 에는

각각의 스레드에서 동작하는 PC Register, JVM Stack, Native Method Stack으로 구성되어 있고

공유 스레드에서 동작하는 Heap과 Method Area가 있습니다.


PC Register는 JVM 명령의 주소를 가지는 곳입니다.

JVM Stack은 스레드의 정보를 Stack Frame에 저장합니다.

Stack Frame은 Local variable section, Operand stack, Frame data로 구성되어 있습니다.

- Local variable section 은 Method parameter와 local variable 을 저장하는 곳입니다.

- Operand stack 은 zero base Array로 구성되어있으며 push, pop 연산이 일어나는 곳입니다.

- Frame data 는 Constant pool resolution, Exception Dispatch, Normal method return 등의 정보를 가지고 있는 곳입니다.

Native Method Stack은 Java 외의 언어로 작성된 Native Code들을 위한 Stack 입니다.

Heap은 Instance 와 Array를 할당하고 GC (Garbage Collection) 가 일어나는 곳이기도 합니다.

Metaspace, Young Generation, Old Generation으로 구성되어있습니다.

- Metaspace는 생성된 객체들의 정보의 주소값이 저장된 공간으로 JVM이 GC 관리를 편리하게 하는 객체를 가지고 있습니다.

- Young Generation 은 Eden 과 Survivor 로 구성되어있으며 Eden은 Instance 최초 생성공간, Survivor은 Eden에서 참조되는 객체들이 저장되는 공간입니다.

- Old Generation 은 Young Generation 에서 일정시간 이상 참조되고 있는 Instance들이 저장된 공간입니다.

Method Area는 Heap의 논리적 부분이며 GC 대상과 Type meta data를 저장하는 곳입니다.

JVM 시작시 생성되며 Class file에서 type에 관한 정보를 추출하여 Method area에 저장하고 Constant Pool을 가지고 있습니다.

Comments