JVM에 대한 매우 기본적인 질문이 있습니다. 컴파일러입니까 아니면 인터프리터입니까?
인터프리터라면 JVM 내부에 존재하는 JIT 컴파일러는 어떻습니까?
둘 다 없으면 JVM은 정확히 무엇입니까? (바이트 코드를 기계 특정 코드 등으로 변환하는 jVM의 기본 정의를 원하지 않습니다.)
JVM에 대한 매우 기본적인 질문이 있습니다. 컴파일러입니까 아니면 인터프리터입니까?
인터프리터라면 JVM 내부에 존재하는 JIT 컴파일러는 어떻습니까?
둘 다 없으면 JVM은 정확히 무엇입니까? (바이트 코드를 기계 특정 코드 등으로 변환하는 jVM의 기본 정의를 원하지 않습니다.)
답변:
먼저 다음 용어에 대한 명확한 아이디어를 봅시다.
Javac
is Java Compiler-Java 코드를 Bytecode 로 컴파일합니다.
JVM
is Java Virtual Machine-실행 / 해석 / 바이트 코드를 원시 기계 코드 로 변환
JIT
Just 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?
- 답변 :
.class
파일을 RAM에도움이 되었기를 바랍니다 ..
둘 다 약간이지만 전통적인 의미에서는 아닙니다.
최신 JVM은 바이트 코드를 가져와 처음 필요할 때 네이티브 코드로 컴파일합니다. 이 문맥에서 "JIT"는 "just in time"을 의미합니다. 외부에서는 인터프리터 역할을하지만 실제로는 기계 코드로 컴파일됩니다.
JVM은 소스 코드를 바이트 코드로 컴파일하는 Java 컴파일러와 혼동해서는 안됩니다. 따라서 "컴파일러"라고 생각하는 것은 유용하지 않지만 백그라운드에서 컴파일을 수행한다는 것을 아는 것이 좋습니다.
.dex
해석 또는 JIT (Just-In-Time) 컴파일을 통해 코드를 직접 실행할 수 있습니다 ..." ( source.android.com/devices/tech/ota/ab/… )
Javac은 컴파일러이지만 전통적인 컴파일러는 아닙니다. 컴파일러는 일반적으로 실행을 위해 소스 코드를 기계 수준 언어로 변환하며 이는 단일 샷으로 수행됩니다. 즉, 전체 코드를 취해 ONCE에서 기계 수준 언어로 변환합니다. (아래에 더 자세히 설명). 반면 JavaC는이를 머신 레벨 언어 대신 바이트 코드로 변환합니다.
JIT는 Java 컴파일러이지만 인터프리터 역할도합니다. 일반적인 컴파일러는 모든 코드를 한 번에 소스 코드에서 기계 수준 언어로 변환합니다. 대신 JIT는 한 줄씩 이동하고 (한 줄씩 실행은 인터프리터의 기능 임) JavaC에서 생성 된 바이트 코드를 기계 수준 언어로 변환하여 실행합니다. JIT가있는 JVM에는 여러 구현이 있습니다. 핫스팟은 자바 프로그래밍의 주요 요소 중 하나입니다. 핫스팟 구현은 JIT가 반복적 인 코드 덩어리를 머신 레벨 언어로 한 번에 (위에서 언급 한 컴파일러처럼) 변환하여 실행을 최적화하여 코드의 각 라인을 1 씩 변환하는 대신 더 빠르게 실행할 수 있도록합니다. 컴파일러 및 인터프리터의 일반적인 정의와 관련하여 대답은 흑백이 아닙니다.
이것은 여러 온라인 답변, 블로그 등을 읽은 후 이해 한 것입니다. 누군가가 이러한 이해를 향상시킬 제안이 있으면 언제든지 제안하십시오.
JVM에는 컴파일러와 인터프리터가 모두 있습니다. 컴파일러가 코드를 컴파일하고 바이트 코드를 생성하기 때문입니다. 그 후 인터프리터는 바이트 코드를 기계가 이해할 수있는 코드로 변환합니다.
예 : 프로그램을 작성하고 컴파일하면 Windows에서 실행됩니다. .class 파일을 다른 OS (Unix)로 가져 가면 바이트 코드를 기계가 이해할 수있는 코드로 변환하는 인터프리터 때문에 실행됩니다.