자바 가상 머신(Java Virtual Machine) OS에 구애 받지 않고
Java를 실행할 수 있도록 OS와 Java 사이에서 .class파일 해석을 담당하는 착한녀석👼
- Class Loader
Javac에 의해 컴파일 된 .class 파일들을 실행해 기계어로 해석한 뒤
Runtime Data Area에 배치하는 역활
- Execution Engine
.class 파일을 기계어로 변환, 실행하는 역활
Interpreter와 JIT Compiler가 있음
- Garbage Collector
Heap영역에 생성된 객체들을 관리
참조가 없는 객체들을 제거하며 메모리 관리를 담당
- Runtime Data Area
OS로 부터 JVM이 프로그램을 수행하기 위해 할당받는 메모리 영역
공유 스레드에서 동작 하는 Heap, Method Area
각각의 스레드에서 동작하는 Stack Area, PC Resisters, Native Method Stack로 나누어짐
- Build시 자바 컴파일러 Javac를 통해 .java파일을 .class(바이트코드)로 컴파일
- .class 파일을 Class Loader가 실행하고 기계어로 해석한 다음 RunTime Data Area에 배치
실직적으로는 Execution Engine인 interpreter와 JIT Compiler가 OS에 맞는 기계어로 해석
- JDK
Java Development Kit으로 자바 프로그래밍을 위한 라이브러리 및 기타 파일들의 모음
설치시 JRE도 같이 설치됨
- JRE
Java Runtime Enviroment로 .java 파일을 실행할 수 있는 라이브러리 및 기타 파일들의 모음
JDK는 포함돼 있지 않음
참고로 JSP를 이용해 view 구성을 할 때에는 JRE만으로 불가능 애플리케이션 서버가 JSP를 servlet으로 변환하고 JDK를 이용해 servlet를 컴파일 해야하기 때문
- JIT Compiler
JUST IN TIME으로 Interpreter의 느린 속도를 개선하기 위해서 만들어짐,
프로그램을 실제 실행하는 시점에 기계어로 번역하는 Compiler기 때문에
초기 실행속도가 느릴 수 있고 반복적인 작업을 할 경우 훨씬 좋은 성능을 기대할 수 있음
- 바이트 코드
특정 하드웨어에 대한 낮은 의존성과 보다 쉬운 인터프린팅 결과를 만들기 위한 이진 표현법
가상머신이 이해할 수 있는 언어 (바이트 코드 ≠ 바이너리 코드)
실행하기 위해서는 기계어로 해석이 필요