2014-12-27 2 views
7

프로필 정보 (JVM에서 제공)를 사용하여 메소드 구조를 기반으로 JIT 전략을 작성하려고하지만 JIT를 수동으로 트리거 할 수 없습니다. This documantationjava.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 코드를 추적과 같은 메신저 내 주요 주제를 떠나기. 코드의 자바 측에서 사용할 간단한 솔루션을 찾고 있습니다.

+0

당신이 확실 자바 (9)의 일부를 형성 할 예정이다 있지만

불행하게도, 아직 존재하지 않는 이유는 무엇입니까? 참조한 문서는 설정해야 할 필요성에 대해 명시 적으로 참조합니다. 'System.out.println (System.getProperty ("java.compiler"));'로 확인할 수 있습니다. – Makoto

+0

'System.out.println (System.getProperty ("java.compiler"));'코드는 null을 출력합니다. 그리고 특정 값을 설정하기 위해 문서를 찾을 수없는 경우에도 스스로 값을 설정해야하는지 확신하지 못합니다. . –

답변

2

컴파일러 제어 기능 (http://openjdk.java.net/jeps/165)과 비슷한 것을 원하는 것처럼 들립니다. 현재 당신이`java.compiler` 속성이 컴퓨터에 활성화했는지

+0

예, 좀 더 구체적인 프로그래밍 방식의 제어가 필요합니다. 하지만 현재 JDK에서'java.lang.Compiler' 클래스의 존재를 이해하지 못합니다. 이 클래스가 다른 벤더가 JDK를 제어하는 ​​기능인 경우 핫 스폿이 'Compiler'를 사용하기위한 기본 구현을 제공하지 않는 이유는 무엇입니까? –

관련 문제