[java] JVM은 컴파일러입니까 아니면 인터프리터입니까?

JVM에 대한 매우 기본적인 질문이 있습니다. 컴파일러입니까 아니면 인터프리터입니까?

인터프리터라면 JVM 내부에 존재하는 JIT 컴파일러는 어떻습니까?
둘 다 없으면 JVM은 정확히 무엇입니까? (바이트 코드를 기계 특정 코드 등으로 변환하는 jVM의 기본 정의를 원하지 않습니다.)



답변

먼저 다음 용어에 대한 명확한 아이디어를 봅시다.

Javacis Java Compiler-Java 코드를 Bytecode 로 컴파일합니다.

JVMis Java Virtual Machine-실행 / 해석 / 바이트 코드를 원시 기계 코드 로 변환

JITJust In Time 컴파일러- 기본적으로 실행 하기 전에 주어진 바이트 코드 명령어 시퀀스를 런타임 에 기계 코드로 컴파일합니다 . 주요 목적은 성능을 크게 최적화하는 것입니다.

이제 질문에 대한 답을 찾아 보겠습니다 ..

1) JVM: is it a compiler or an interpreter?답변 : 통역사

2) what about JIT compiler that exist inside the JVM?답변 : 이 답글을 완전히 읽으 셨다면 아마 지금 알 것입니다.

3) what exactly is the JVM?답변 :

  • JVM은 RAM에 상주하는 가상 플랫폼입니다.
  • 그 구성 요소 인 클래스 로더.class 파일을 RAM에
  • JVM 의 바이트 코드 검증 자 구성 요소는 코드에 액세스 제한 위반이 있는지 확인합니다. (이것은 자바가 안전한 이유 중 하나입니다)
  • 다음으로 Execution Engine 구성 요소는 바이트 코드를 실행 가능한 기계 코드로 변환합니다.

도움이 되었기를 바랍니다 ..


답변

둘 다 약간이지만 전통적인 의미에서는 아닙니다.

최신 JVM은 바이트 코드를 가져와 처음 필요할 때 네이티브 코드로 컴파일합니다. 이 문맥에서 “JIT”는 “just in time”을 의미합니다. 외부에서는 인터프리터 역할을하지만 실제로는 기계 코드로 컴파일됩니다.

JVM은 소스 코드를 바이트 코드로 컴파일하는 Java 컴파일러와 혼동해서는 안됩니다. 따라서 “컴파일러”라고 생각하는 것은 유용하지 않지만 백그라운드에서 컴파일을 수행한다는 것을 아는 것이 좋습니다.


답변

마찬가지로 @delnan이 이미 코멘트 섹션에서 언급 한, 그것은 없습니다 .

JVMJava 바이트 코드를 실행하는 추상 기계입니다 .

JVM에는 여러 가지 구현이 있습니다.

  • HotSpot (통역사 + JIT 컴파일러)
  • Dalvik (통역사 + JIT 컴파일러)
  • 예술 ( AOT 컴파일러 + JIT 컴파일러)
  • GCJ (AOT 컴파일러)
  • JamVM (통역사)

… 및 기타 .

JVM에 대해 이야기 할 때 대부분의 답변은 HotSpot 또는 JVM 구현에 대한 위의 접근 방식을 혼합하여 참조합니다.


답변

둘 다입니다. 바이트 코드를 해석하는 것으로 시작하여 그만한 가치가 있다고 판단되면 해당 바이트 코드를 원시 기계 코드로 컴파일 할 수 있습니다.


답변

둘 다입니다. 바이트 코드를 해석하고 네이티브 코드로 컴파일 할 수 있습니다.


답변

다른 사람들이 말했듯이 둘 다입니다! 당신이 볼 수있는 것보다 더 자세하게 참조하고 싶다면 : 이 IBM 설명


답변

Javac은 컴파일러이지만 전통적인 컴파일러는 아닙니다. 컴파일러는 일반적으로 실행을 위해 소스 코드를 기계 수준 언어로 변환하며 이는 단일 샷으로 수행됩니다. 즉, 전체 코드를 취해 ONCE에서 기계 수준 언어로 변환합니다. (아래에 더 자세히 설명). 반면 JavaC는이를 머신 레벨 언어 대신 바이트 코드로 변환합니다.

JIT는 Java 컴파일러이지만 인터프리터 역할도합니다. 일반적인 컴파일러는 모든 코드를 한 번에 소스 코드에서 기계 수준 언어로 변환합니다. 대신 JIT는 한 줄씩 이동하고 (한 줄씩 실행은 인터프리터의 기능 임) JavaC에서 생성 된 바이트 코드를 기계 수준 언어로 변환하여 실행합니다. JIT가있는 JVM에는 여러 구현이 있습니다. 핫스팟은 자바 프로그래밍의 주요 요소 중 하나입니다. 핫스팟 구현은 JIT가 반복적 인 코드 덩어리를 머신 레벨 언어로 한 번에 (위에서 언급 한 컴파일러처럼) 변환하여 실행을 최적화하여 코드의 각 라인을 1 씩 변환하는 대신 더 빠르게 실행할 수 있도록합니다. 컴파일러 및 인터프리터의 일반적인 정의와 관련하여 대답은 흑백이 아닙니다.

이것은 여러 온라인 답변, 블로그 등을 읽은 후 이해 한 것입니다. 누군가가 이러한 이해를 향상시킬 제안이 있으면 언제든지 제안하십시오.