sungwony

JVM(Java Virtual Machine) Runtime Data Area 본문

language/java

JVM(Java Virtual Machine) Runtime Data Area

일상이상삼상 2018. 2. 14. 15:44

JVM의 Runtime Data Area는 자바 애플리케이션 실행을 위한 메모리 영역이다.


  • Register
  • JVM Stack
  • Native Method Stack
  • Method Area
  • Heap
Register, JVM stack, Native Method Stack은 각 Thread가 개별적으로 소유한 공간.
(Thread와 운명을 함께 한다.)

Method Area, Heap은 모든 Thread가 공유하는 공간.
(JVM 기동시에 생성된다.)

JVM은 Stack 기반 구조를 가지고 있다.


Register

CPU 내 Register는 데이터를 신속하게 저장하여 사용하는 공간으로 data, address, status 등으로 구성되어 있다. 한편 가상 머신인 JVM에도 PC(Program Counter) Register와 optop, frame, vars 등 Stack 영역을 관리하는 3개 Register가 존재한다. 각 Register의 크기는 32bit(=JVM 1 word)이다.



JVM Stack


각 Thread는 고유의 JVM Stack 공간을 가지고 있다. Stack은 Frame을 여러 장 쌓아놓은 구조이며, 1개 Frame은 1개 메서드에 대응한다. 다시 말해 JVM Stack은 Thread 단위, Stack Frame은 메서드 단위이다.


Stack은 LIFO(후입선출) 방식이기 때문에 새로운 메서드를 호출하면 Stack 최상단에 새로운 메서드에 해당하는 Frame이 놓인다. 그리고 해당 메서드 수행이 끝나면 Stack 최상단에 놓여있던 Frame은 사라진다. Frame 내부 구조는 다음과 같다.


  • Operand Stack
  • Local Variable
  • Execution Environment
- Operand Stack
  : Operand Stack은 연산 과정 수행 중 피연산자(Operand)가 들어오고(push) 나가는(pop) 공간이다.

int i1 = 1;
int i2 = 2;
int i3 = i1 + i2 


1. int 1을 Operand Stack에 push한다.

2. Operand Stack의 int(1)를 Local Variable slot 1에 pop한다.

3. int 2를 Operand Stack에 push한다.

4. Operand Stack의 int(2)를 Local Variable slot 2에 pop한다.

5. Local Variable slot 1의 int(1)를 Operand Stack에 push한다.

6. Local Variable slot 2의 int(2)를 Operand Stack에 push한다.

7. Operand Stack의 두 int(1,2)를 add한다.

8. Operand Stack의 int(3)를 Local Variable slot3에 pop한다.

'language > java' 카테고리의 다른 글

[JAVA8] 메소드 참조  (0) 2018.06.28
[JAVA8] Stream  (0) 2018.06.27
[JAVA8] java.util.function 패키지  (0) 2018.06.27
[JAVA8] 람다(Lambda) 표현식  (0) 2018.06.26
[JAVA8] 자바8 목차  (0) 2018.06.26