2013-06-28 3 views
6

Java JIT는 동일한 머신에서 실행할 때마다 동일한 최적화로 바이트 코드를 컴파일합니까?자바 JIT 컴파일러는 결정적으로 바이트 코드를 컴파일합니까? 동일한 머신에서 실행될 때마다 동일한 최적화가 수행됩니까?

주어진 순간에 CPU 사용과 같은 동적 요소를 고려해야합니까? 또는 임시 요인에 관계없이 매번 동일한 최적화를 수행합니까?

+0

Java JIT 컴파일러는 무엇입니까? – SLaks

+1

HotSpot에 대해 알고 싶습니다. – selig

+0

프로그램에 임의성이 있고 하나의 메소드가 A 메소드를 호출하고 다른 하나가 B 메소드를 호출하면 아니오, 동일한 최적화를 얻지 못합니다. –

답변

4

아니요, 최적화는 비 결정적입니다. 동일한 단일 스레드, 완전히 결정적 인 프로그램을 실행하더라도 최적화 할 메소드를 결정하기 위해 JIT에서 사용하는 샘플러는 다른 세트를 선택할 수 있습니다.

생성 된 기계 코드를 변경할 수있는 또 다른 사항은 코드에서 참조하는 특정 상수의 실제 메모리 위치입니다. JIT는 이러한 메모리 위치에 직접 액세스하는 기계 명령어를 내보낼 수 있으므로 다른 패스에서 기계 코드간에 추가 차이가 발생합니다.

Jikes RVM을 사용하는 연구원은 Compiler Replay이라는 기능을 사용하여 벤치 마크에서이 문제를 해결했습니다.

관련 문제