프로필 정보 (JVM에서 제공)를 사용하여 메소드 구조를 기반으로 JIT 전략을 작성하려고하지만 JIT를 수동으로 트리거 할 수 없습니다. This documantation은 java.lang.Compiler.compileClass()
을 호출하여 JIT를 실행할 수 있지만 매번 false를 반환하고 java.lang.Compiler
이 JVM을 실행할 때마다 (java.compiler)가 null인지 확인합니다. OpenJDK와 Oracle JVM 1.7 모두에서 동일한 결과를 얻었습니다.java.lang.Compiler 이외의 JIT를 수동으로 트리거하는 방법이 있습니까?
내가
$ jstat -printcompilation <PID>
로 컴파일 통계를 관찰 할 때 나는 JIT의 성공적를 볼 수는 조건에 맞는 몇 가지 방법을 컴파일합니다.
어떤 식 으로든 나는 자바 코드에서 오히려 그것을 트리거합니다. hotspot VM's code에서 검색을 시도했지만 결정을 내리고 JIT를 시작하는 클래스와 메소드를 찾을 수 없습니다.
편집 : 더 많은 것을보고 난 후에 compilationPolicy.cpp 부는 아직도 결정이 의존하는 정확한 위치를 찾지 못했습니다. 나는, (단순히 생각) 같은
if(hot_count > Threshold){
compile_method(methodHandle);
}
대신이 발견을 제외시켰다 것
void SimpleCompPolicy::method_invocation_event(methodHandle m, JavaThread* thread) {
const int comp_level = CompLevel_highest_tier;
const int hot_count = m->invocation_count();
reset_counter_for_invocation_event(m);
const char* comment = "count";
if (is_compilation_enabled() && can_be_compiled(m)) {
nmethod* nm = m->code();
if (nm == NULL) {
// [MY COMMENT] no check being done on hot_count in here or callee methods
CompileBroker::compile_method(m, InvocationEntryBci, comp_level, m, hot_count, comment, thread);
}
}
}
지금까지, 기본 JVM 코드를 추적과 같은 메신저 내 주요 주제를 떠나기.
코드의 자바 측에서 사용할 간단한 솔루션을 찾고 있습니다.
당신이 확실 자바 (9)의 일부를 형성 할 예정이다 있지만
불행하게도, 아직 존재하지 않는 이유는 무엇입니까? 참조한 문서는 설정해야 할 필요성에 대해 명시 적으로 참조합니다. 'System.out.println (System.getProperty ("java.compiler"));'로 확인할 수 있습니다. – Makoto
'System.out.println (System.getProperty ("java.compiler"));'코드는 null을 출력합니다. 그리고 특정 값을 설정하기 위해 문서를 찾을 수없는 경우에도 스스로 값을 설정해야하는지 확신하지 못합니다. . –