chapter 2 . Run-time Data Areas
-
process로서 JVM이 프로그램을 수행하기 위해 OS로부터 할당 받는 메모리 영역이다.
-
각각의 목적에 따라 5개의 영역으로 나뉜다.
이중 PC Register와
두 개의 stack영역은 각 Thread별로 생성되며, Method Area와 Heap은 모든 Thread에게 공유된다.
① PC Register
-
각 thread마다 하나씩 존재한다.
-
thread생성될 때 같이 생성되며, native pointer와 return address를 가지고
있다. Thread가 java method를 수행할 때 현재
수행되고 있는 instruction의 주소를 포함하고 있고, 이 instruction의 주소는 native pointer일수도 있고 method bytecode의 시작점일 수도 있다.
-
Operand와 instruction을 저장해두는 별도의 메모리 공간.
② Java Virtual Machine Stacks
-
Thread의 수행정보를 기록하는 frame을 저장하는 메모리 영역이다.
-
Thread별로 존재하며 thread 시작될 때 생성된다.
-
Java Virtual Machine Stacks에
있는 모든 데이터는 각 thread가 소유하며, 다른 thread는 접근이 불가능하다.
* Stack Frame
Stack Frame은 Thread가 수행하고 있는 application단위로 기록하는 곳이다. Stack Frame은 Method를 실행하게 되면 Class의 메타 정보를 이용하여 적절한 크기로 생성된다. 그러나
이 stack frame의 크기는 가변이 아니며 compile
time에 이미 결정된다. JVM은 생성된 Stack
Frame을 Java Virtual Machine Stacks에 Push해 넣고 Method를 수행한다.
⑴Local Variable Section
-
Local Variable Section은 Method의 Parameter Variable과 Local Variable들을 저장한다.
-
Array로 구성되어 있고, index를 통해 Data를 찾아간다.
-
Method parameter는 선언된 순서로
인덱스가 할당되며, local variable은 compile가
알아서 인덱스를 할당한다.
⑵Operand Stack
-
JVM의 작업공간. JVM이 프로그램을 수행하면서 연산을 위해 사용되는 데이터 및 그 결과를
Operand Stack에 넣고 처리하기 때문이다.
⑶Frame Data
-
Constant pool resolution정보와 method가 정상 종료 했을 때의 정보들, 그리고 비정상 종료했을
시에 발생하는 exception관련 정보들을 저장하고 있다.
-
resolution이란, symbolic reference로 표현된 entry를 찾아 direct reference로 변경하는 과정이다. Class의 모든 symbolic reference는 method area의 constant pool이라는 곳에 저장되기 때문에 resolution을 constant pool resolution이라 하는 것이다.(symbolic
reference를 실제 pointer로 변경한 작업)
③native Method Stacks
④method Area
-
모든 thread들이 공유하는 메모리 영역이다.
-
이 영역은 Load된 type을 저장하는 논리적 메모리 공간으로 정의할 수 있다.
-
JVM이 가동할 때 생성이 되며 Garbage Collection의 대상이 된다.
Constant pool
-
Type의 모든 상수(constant)정보를 가지고 있다.
-
JVM은 실행 시 참조하는 객체에 접근할 필요가
있으면 constant pool의 symbolic reference를
통해 해당 객체가 위치한 메모리의 주소를 찾아 동적으로 연결하게 된다.
⑤ Heap
-
Instance나 array가 저장되는 공간이며 모든 thread들에 공유된다.
-
JVM은
Heap에 메모리를 할당하는 instruction만 존재(new,
newarray, anewarray, multianewarry)
-
메모리 해제를 위한 명시적인 java code나 byte code도 없으며 메모리 해제는 garbage collection을
통해 수행된다.
-
Java heap은 vendor마다 구조나 구현이 다르다.
`* VTable
클래스 내에 가상함수를 만들게 되면 컴파일러는 클래스에 가상함수테이블을
붙이게 된다. VTable은 함수를 가리키는 포인터 변수가 함수 개수만큼 존재하게 된다.. 다시 말해 실제 함수가 구현된 곳을 가리키는 포인터들의 집합.
Java의 variables
-
Class variables
-
Member variables
-
Parameter variables
-
Local variables
댓글 없음:
댓글 쓰기