Opcode
와 추가 피연산자로 이루어져 있다.자바 가상 머신(영어: Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 jop 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.
-위키피디아
1) 로딩 : 클래스 종류와 경로에 따라 어떤 클래스로더에 의해 로드 될지 경정
2) 링킹 :
3) Initialization :
Runtime Data Area
는 메모리에 올라와있는 자바 프로그램으로써
크게 5개의 주요 구성요소로 나뉘어져있습니다.
Method Area : static 변수들을 포함해서 클래스 수준의 모든 데이터가 이곳에 저장될 것입니다. JVM마다 오직 하나의 method area가 있으며 공유되는 리소스들입니다.
Heap Area : 모든 Objects와 그에 상응하는 instance 변수 그리고 배열들이 이곳에 저장됩니다. 물론 JVM마다 하나의 Heap Area가 존재합니다. Method areas 와 Heap areas는 여러 스레드들간에 공유되는 메모리입니다. 즉, 이 곳에 저장된 데이터들은 스레드에 안전하지 않습니다.
Stack Area : 각각의 스레드를 위해 분리된 런타임 스택이 생성됩니다. 메소드 호출마다, Stack Frame이라 불리는 하나의 Entry가 Stack memory가 생성됩니다. stack area는 스레드에 안전하지만 공유되는 리소스가 아닙니다. 또, Stack Frame은 3가지 Subentities로 나뉘어집니다.
PC Register : 각 스레드는 현재 실행중인 상태 정보를 저장하는 개별적인 PC Register들을 가질 것이고 진행이 되면 지속적으로 갱신됩니다.
Native Method stacks : Native Method Stack 는 native method 정보를 가지고 있습니다. 각 스레드는 개별의 native method stack 이 생성될 것입니다.
JIT Compiler는 interpreter의 단점을 없애준다. Execution Engine은 interpreter가 bytecode를 변환하는데 사용하지만 반복되는 코드를 발견했을 때 전체 bytecode를 컴파일하고 그것을 native code로 바꾸는 JIT compiler를 사용한다. 여기서 생성된 native code는 반복되는 메소드 호출에 대해 성능을 개선하기위해 직접적으로 사용됩니다.
참조되어 있지 않는 Objects들을 모으고 제거하는 역할을 합니다. Garbage Collection은 System.gc() 를 호출하므로 발생합니다. 하지만 실행이 보장되지는 않습니다.
Java Native Interface (JNI)
JNI 는 Native Method Libraries와 상화작용하며 Execution Engin을 위해 Native Libraries를 제공합니다.
Execution Engine에서 필요한 Native Libraries의 모음입니다.
Reference:
- https://dzone.com/articles/jvm-architecture-explained [JVM]
- https://swk3169.tistory.com/181 [JAVA 동작방식]
- https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0 [위키피디아]
- https://web.archive.org/web/20080120124025/http://www.javaworld.com/javaworld/jw-10-1996/jw-10-indepth.html [java world 공식페이지]
- https://velog.io/@jihoson94/JVM-Java-virtual-Machine [JVM 정리페이지]