JVM (Java Virtual Machine)
JVM은 바이트 코드를 실행할 수 있는 가상 머신이다.
JVM은 OS에 의존적이다. 즉, Linux JVM, Windows JVM 등이 별개로 존재한다.
JVM은 OS에 의존적이지 않은 바이트 코드를 OS에 알맞는 기계어로 번역해서 실행한다.
JVM은 다음 3가지 요소로 구성된다.
1. Execution engine
- JIT 컴파일러
- Interpreter
- Garbage Collector
2. Class loader
3. Runtime data area
Execution engine에서 가장 먼저 동작하는 것은 인터프리터이다.
인터프리터는 바이트 코드(.class)를 한 줄 씩 기계어로 번역하고 즉시 실행한다.
인터프리터가 동작하면서 어느 정도 프로그램에 대한 통계적인 정보가 쌓이게 되면 JIT 컴파일러는 자주 사용되는 code section을 컴파일한다. 즉, 자주 사용되는 부분을 미리 기계어로 번역해둔다.
Class loader는 클래스를 메모리에 로딩하는 역할을 맡는다.
Class loader는 다이나믹 로딩 방식으로 작동한다. 즉, 처음에 모든 클래스를 로딩하지 않고 런타임에 그때그때 필요한 클래스를 로딩한다.
Runtime data area는 프로그램을 실행할 때 사용하는 메모리 영역이다.
JRE (Java Runtime Environment)
JRE는 JVM + 라이브러리라고 볼 수 있다.
JRE가 있으면 자바 프로그램을 실행할 수 있다.
JDK (Java Development Kit)
JDK는 JRE + 개발 도구라고 볼 수 있다.
개발 도구에는 javac(Java 컴파일러), javadoc 등이 포함된다.
JDK가 있으면 자바 프로그램을 개발할 수 있다.
Reference
[2] https://stackoverflow.com/questions/3718024/jit-vs-interpreters
'프로그래밍 언어 > Java' 카테고리의 다른 글
접근 제어자와 캡슐화 (0) | 2023.01.07 |
---|---|
call by value vs call by reference (0) | 2023.01.05 |
접근 제어자 (0) | 2022.06.03 |
클래스 클래스 (0) | 2022.05.31 |
인텔리제이 단축키 (0) | 2022.05.31 |