2014-12-09 7 views
0

질문을 단순화하기 위해 JRE에서 JIT를 사용하지 않는 핫스팟 JVM 구현을 가정합니다. 의미 우리는 기계어 코드가 미리 컴파일되지 않습니다.핫스팟 JVM이 코드를 기계 코드로 컴파일하거나 간단하게 실행합니다

바이트 코드를 만났을 때 JVM이 Hotspot 컴파일러를 사용하여 코드를 기계 코드로 컴파일하고 JVM이 코드를 실행할 수 있는지 이해하려고합니다. 또는 JVM이 각 바이트 코드 명령에 해당하는 일종의 고유 메소드를 가지고 있기 때문에 인터프리터가 코드를 실행하기 만합니까?

+0

도 참조하십시오. http://stackoverflow.com/questions/12340603/how-is-a-java-program-compiled-and-run – Raedwald

답변

3

의미 우리는 기계어 코드를 미리 컴파일하지 않습니다.

위 문장은 JIT 컴파일러의 오해를 나타냅니다. 그것은 코드를 미리 컴파일하지는 않습니다. 다만 시간상, 따라서 이름을 컴파일합니다.

"HotSpot 컴파일러"가 JIT 컴파일러이기 때문에 나머지 질문을 이해하기 어렵게 만듭니다.

그러나 이것을 요약하면 다음과 같습니다. 일반적으로 HotSpot은 바이트 코드를 해석 한 다음 런타임 프로파일 링 데이터가 "핫스팟"임을 나타내는 해당 부분을 컴파일하여 많은 양을 실행합니다 기본 임계 값은 코드 조각에 대해 10,000 패스입니다.

JIT 컴파일을 사용하지 않으면 HotSpot에서 모든 Java 바이트 코드를 해석합니다.

+0

Excelent Answer! 나는 많은 소스에서 알아 내려고 노력했지만 너의 것만 큼 명확하지 않았다. 설명 : HotSpot은 JIT 컴파일러를 사용하는 JVM 버전입니다 (이름은 Just In Time 컴파일을 제안함). JVM이 많이 실행되는 메소드를 찾으면 JIT를 사용하여 런타임을 최적화하여 머신 코드를 컴파일 한 다음이 메소드를 실행하십시오. 그래서 다른 컴파일러가 없습니다! JVM의 경우 JVM은 JIT를 사용하지 않는 경우 실제로 바이트 코드를 실행합니다. 맞습니까? 또한 어떻게 바이트 코드를 실행합니까/기본 메소드 집합을 가지고 있습니까? – ZiviMagic