2014-01-17 6 views
3

나는 약 instruction setwiki에서 읽고 있던 나는이 단락 건너 온 :은 바이트 코드가 JVM 용 명령어 세트로 취급됩니까?

자신의 ISA 같은 스몰 토크, 자바 가상 머신, 마이크로 소프트의 공용 언어 런타임으로 바이트 코드를 지원하는 일부 가상 머신,이를 구현 translatin에 의해 일반적으로 사용되는 바이트 코드는 코드를 네이티브 컴퓨터 코드로 코드화합니다. 또한 이러한 가상 머신은 해석 코드 (Just-In-Time Compilation 참조)을 통해 사용 빈도가 낮은 코드 경로를 실행합니다. Transmeta는 이러한 방식으로 VLIW 프로세서 위에 x86 명령어 세트를 구현했습니다.

정확히 무엇을 의미합니까? 은 bytecodes이고 JVMISA이고 JVM은 프로세서의 ISA을 차례로 지원합니다.

답변

10

네, 예상대로입니다. JVM/JRE는 Java 바이트 코드를 명령어 세트로 사용하며 각 JVM은 네이티브/로컬 하드웨어 (따라서 로컬 명령어 세트)에서 컴파일되고 실행 가능해야합니다.

enter image description here

JRE를/JVM은 JVM 자체 자바 바이트 코드의 정의와 해석이 동일하게 유지하지만, 그것이 실행되는 특정 하드웨어에 대한 컴파일 할 필요가 : 위키 백과에서이 그림이 잘 내가 생각 보여줍니다. Java 바이트 코드는 자바 소스 코드와 로컬 머신/바이너리 코드 사이의 일종의 추상화 계층으로 볼 수 있습니다. 일반적인 Java 프로그래머와 기계 관련 사항을 모두 알아야 할 필요는 없지만 JVM/JRE가 처리하는 거의 모든 것이 있습니다.

+0

+1 다이어그램을 선택합니다. –

+0

대부분의 Java API가 Java로 구현되고 응용 프로그램 코드와 동일한 체인을 통과하므로 JVM 구성 요소 아래에 "Java API"를 배치하지 않습니다. – Holger

3

는 바이트 코드는 바이트 코드는 JVM의 지침이다 JVM

에 대한 ISA이다입니다.

그리고 JVM은 프로세서의 ISA를 지원합니다.

실제 프로세서가 실제 작업을 수행하므로 JVM이 이것을 원시 명령어로 변환합니다. 먼저 간단하지만 느리게 수행하고 일단 코드가 최적화되면 (비싸다) 원시 원시 명령어로 코드가 빠르게 실행됩니다.

+2

JVM이 원시 명령어와 바이트 코드 사이의 추상화 계층을 제공한다고 말하는 것이 맞습니까? –

+1

@ user1988876 : 맞습니다. – blackcompe

2

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 컴파일러는 장치의 명령어 세트로 컴파일을 지원해야합니다.

+0

새로운 프로세서를위한 JVM을 작성하는 것은 어려울 것입니다. 한편으로는 ISA와 다른 한편으로는 바이트 코드에 대한 ISA와의 계약이 있습니다! –

+0

@ user1988876 : 음 ... 네, 그렇게 말할 수 있습니다 :) 정교한 개발자 팀이 그렇게 나쁘지는 않을 것 같습니다. 언어 자체를 설계하는 것이 어려운 부분입니다. – blackcompe

+1

@ user1988876 : 바이트 코드에 대한 인터프리터 또는 JIT 컴파일러 구현은 약 200 개의 명령어 만 번역하면되므로 어렵지 않습니다. 그러나 실제로 작동 시키려면 객체 모델, 메모리 관리, 스레딩 및 동기화, 저수준 I/O 부품 등을 구현해야합니다. 바이트 코드 부분이 얼마나 쉬운 지 처음 보았을 때 열정을 샀습니다. – Holger