티스토리 뷰

반응형

 

 

 

 

JVM은 기본적으로 Stack에서 모든 연산이 이루어질 수 있도록 설계되었음.

바이트 코드는 명령들의 집합으로써 각 명령들은 1 byte의 opcode와 n 개 이상의 연산자(operand)로 구성된다.

opcode에는 JVM에서 실행할 명령 코드가 들어 있다.

 

1) 스택(Runtime Stack)

바이트 코드(컴파일된 목적 코드)를 불러들여서(load) 지역 변수(local variable)을 할당.
블록 영역을 벗어나면 소멸. 반드시 초기화 작업 선행되어야 함. 자동으로 초기화 되지 않음.

 

2) 힙(Heap : The garbage-collected Heap)

배열이나 클래스 객체(인스턴스)가 할당됨. GC(Garbage Collector)가 관리함.
이 영역은 특별한 초기화 없이도 사용가능하다. 참고로 인스턴스(instance)들의 초기값은 null이다.

 

3) 상수 영역(liternal pool)와 메소드 영역(method area)

실질적으로 바이트 코드(목적 코드)가 위치한 영역.
고정(static) 값을 가지는 상수(constant), 추상 메소드(abstract method)
가 위치하는 영역. 실행(runtime)시 호출(call)을 위해서 주소 위치를 갖게 됨.
특히, 외부에서는 호출되는 메모리의 주소(위치)를 파악할 수 없어서
해킹이 어려움(보안). 참고로 native method area는 다른 언어(C, C++ 등)
언어의 메소드 사용시 그 메소드들이 불러들여지는 영역임.

 

4) 레지스터 영역(process register area)

JVM 실행시 호출할 메모리 주소를 기억해두는 곳.
실행 프로세서들이 작동될 때 이곳에 등록(registration)된 내용을 기초로 실행됨.


5) Registers

일종의 임시 기억장소(메모리)로써 32비트 주소 지정 방식(addressing)으로 JVM이 관리하며
구체적으로는 주로 스택(stack)을 관리하는 역할을 함.

 

가) optop register (operand-top register)

연산자(oprand)의 마지막 주소를 가지고(혹은 가리키고) 있다(보관).

The top of the operand stack is pointed to by the optop register.

 

나) PC register (program counter register)

메소드 영역의 몇 바이트를 가리키고 있으며
바이트 코드가 실행되면서 한 명령이 실행된 후 다음 명령이 실행될
메모리 주소값을 가지고(fetch) 있음. 쓰레드(thread)의 실행 진행 상황을
주시(감시)하는 역할도 함.

 

다) vars register

실행중인 메소드의 요소들(지역 변수, 반환 값(return value) 등)의 주소값을
가지고(가리키고) 있음.

 

라) frame register (stack frame register : Execution Environment Area(Sector))

스택(operand stack) 자체의 연산을 수행 및 관리하는 역할을 함.

물론 언급한 바와 같이 JVM은 바이트 모드에 대한 모든 연산을 이 스택(stack)에서 실행하게 됨.

연산시 인자들(parameter, 매개변수) 및 명령 및 결과들을 연산하기 위해 임시적으로 보관함.

실행 환경(Execution Environment) 변수들에 대한 주소를 가지고(가리키고) 있음. 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31