JAVA Compiler
- 자바 클래스 파일 .java
- 자바 컴파일러 javac가 컴파일
- 자바 바이트 코드 .class
Class Loader
- JVM의 Class Loader로 자바 바이트 코드가 전달 됨.
- Class Loader는 동적 로딩을 통해 필요한 클래스들을 로딩 후, 링킹해 JVM의 메모리인, Runtime Data Area에 올린다.
Execution Engine
- Execution Engine은 Class Loader를 통해 Runtime Data Area에 load된 바이트 코드를 명령어 단위로 가져와 실행한다. Execution Engine은 두 가지 방식으로 실행이 된다.
Interpreter
- 자바 바이트 코드를 한 줄씩 읽어 실행한다.
- 때문에 느리다.
JIT Compiler
- interpreter의 방식을 보완하기 위해 개발됨.
- interpreter 방식으로 명령어를 실행하다가 적절한 시점에 JIT compiler가 자바 바이트 코드 전체를 Native Code로 컴파일 한다. 이후부터는 Interpreter가 아닌 Native Code를 통해 명령어를 실행하게 된다. Interpreter를 통해 한 줄씩 명령어를 실행하는 것보다 Native Code를 실행하는 것이 더 빠르다. Native Code는 캐시에 보관되기 때문이다.
JIT Compiler를 통해 자바 바이트 코드를 Native Code로 컴파일 하는 과정은 Interpreter를 통해 실행하는 것보다 시간이 많이 소요된다. 따라서 한 번만 호출되는 명령어의 경우는 Interpreter를 통해 실행하는 것이 더 빠르다. 이로 인해 JIT Compiler를 사용하는 JVM들은 명령어가 얼마나 자주 쓰이는 지를 파악해서 일정 수준이 넘어가게 되면 JIT Compiler를 통해 컴파일하게 된다.
JVM의 메모리 구조
Reference
'Java' 카테고리의 다른 글
Java, 이름 붙은 반복문 (0) | 2023.04.02 |
---|---|
Java, == 과 equals()의 차이 (0) | 2023.04.02 |