JVM은 기본적으로 Java 프로그램 용 CPU를 시뮬레이트합니다. CPU가 하드웨어에서 어셈블 된 opcode를 기본적으로 실행하는 것처럼 JVM은 Java opcode를 실행하지만 소프트웨어에서는 엄격하게 실행합니다.
정확히 무엇을 의미합니까? 바이트 코드는 JVM 용 JVM이고 JVM 용 은 프로세서의 ISA를 차례로 지원합니다.
ISA (명령어 세트 아키텍처)는 CPU에서 직접 실행되는 저수준 소프트웨어 작성에 적용되는 일련의 분야 및 기술을 지정합니다. 여기에는 조작 불가능한 직접 CPU 명령 인 opcode 세트가 포함되어 있습니다. JVM은 JVM이 인터프리터 - 원시 명령어를 수행하도록 지시하는 자신의 바이트 코드 세트 (즉, 8 비트 연산 코드)를 인식한다. 따라서, 바이트 코드 스펙은 JVM의 ISA 일부를 구성합니다.
JVM은 자체 메모리 을 사용하여 하나씩 실행하는 opcode 목록을 반복하여 하드웨어 구성 요소 (예 : 스택, 레지스터, 주 메모리)를 에뮬레이션하고 ALU를 에뮬레이트하기위한 원시 산술 및 논리 연산을 사용합니다. 이러한 에뮬레이트 된 컴포넌트는 또한 JVM의 ISA를 구성합니다. 이것이 통역사의 기본 구성입니다. 그러나 Java 응용 프로그램의 런타임을 향상시키기 위해 JVM은 "핫 스폿"을 최적의 성능을위한 시스템 특정 코드로 컴파일합니다. 핫스팟은 자주 실행되는 코드 섹션입니다. 이를 "Just-In-Time"컴파일이라고하며 프로그램이 실행되는 동안 수행 할 수 있습니다. 이 기술은 Java의 성능을 컴파일 된 언어의 성능에 훨씬 더 가깝게합니다. JIT는 .NET 프레임 워크에서도 사용됩니다.
각 운영 체제마다 고유 한 JVM 구현이 있으며 이는 장치의 ISA에 따라 다를 수도 있습니다. 예를 들어 Linux-Arm, Linux-x86 또는 Windows-x86 용으로 작성된 JVM이있을 수 있습니다. JVM 자체는 C와 같이 플랫폼 독립적 인 (어쨌든 정렬) 언어로 작성 될 수 있지만 JIT 컴파일러는 장치의 명령어 세트로 컴파일을 지원해야합니다.
+1 다이어그램을 선택합니다. –
대부분의 Java API가 Java로 구현되고 응용 프로그램 코드와 동일한 체인을 통과하므로 JVM 구성 요소 아래에 "Java API"를 배치하지 않습니다. – Holger