자바 바이트 코드를 실행하여 런타임 환경을 제공하는 사양
javac(java compiler) : .java -> .class (바이트 코드)
interpreter, JIT compiler : .class -> 바이너리(기계어)
JVM subsystem, Java 실행시 클래스로더를 이용하여 클래스를 로더
Java Standard Edition 의 클래스 파일을 포함하는 rt.jar 로드
외부 클래스(라이브러리) 로드
작성한 클래스 파일 로드, 응용 프로그램 클래스 로더라고 칭함
상수 풀, 필드, 메서드 등의 클래스별 구조 저장
객체 할당 영역
LIFO, 로컬 변수 보유, 메서드 호출 및 반환 역할
자바 가상 프로세서로서 JVM을 포함하고 있음, JVP의 설정은 운영체제의 허용범위 안에 범주
플랫폼(OS)에 맞는 자바 인터프리터에 의해 자바를 실행
자바 바이트 코드(class)를 각 각의 OS에서 이해할 수 있는 코드(어셈블리)로 변환
시퀀스를 변경하지 않고 런타임에 소스 코드를 한 줄씩 기계어로 변환
AOT(Ahead-of-Time Compilation), 코드를 기계어로 번역하는 해석 포함
Interpreter 를 사용하지 않고 JIT를 사용하여 성능 향상
메서드를 호출할 때 활성화되며 메서드의 컴파일 된 코드를 직접 호출
한 줄씩 읽는 Interpreter 에 반해 속도가 빠르며
Optimization Levels 단계를 변경하여 성능 향상시 메모리, CPU 측 비용이 증가
PC 레지스터는 JVM 명령어 주소를 포함
응용 프로그램에서 사용되는 모든 기본 메서드 포함
JVM 위에서 실행되며 하드웨어, 운영 체제 종속 프로그램, 타 언어의 라이브러를
호출하거나 호출받는 것을 가능하게하는 프로그래밍 프레임워크
JNI는 위키백과에서 간단한 사용 예시를 확인 가능