programing tip

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

itbloger 2020. 10. 16. 07:13
반응형

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 컴파일러)
  • ART ( AOT 컴파일러 + JIT 컴파일러)
  • GCJ (AOT 컴파일러)
  • JamVM (통역사)

... 그리고 많은 다른 .

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


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


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


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


JVM에는 컴파일러와 인터프리터가 모두 있습니다. 컴파일러가 코드를 컴파일하고 바이트 코드를 생성하기 때문입니다. 그 후 인터프리터는 바이트 코드를 기계가 이해할 수있는 코드로 변환합니다.

예 : 프로그램을 작성하고 컴파일하면 Windows에서 실행됩니다. .class 파일을 다른 OS (Unix)로 가져 가면 바이트 코드를 기계가 이해할 수있는 코드로 변환하는 인터프리터 때문에 실행됩니다.

참고 URL : https://stackoverflow.com/questions/7674839/is-the-jvm-a-compiler-or-an-interpreter

반응형