2014-12-27 15 views
7

'dan başka bir şekilde tetiklemek için bir yol var mı? Profil yapısı bilgisi (JVM tarafından sağlanan) ile yapıya dayalı bir JIT stratejisi oluşturmaya çalışıyorum ancak JIT'i manuel olarak tetikleyemedim. This documantation, java.lang.Compiler.compileClass()'u çağırarak JIT'i çalıştırabileceğimi ancak yöntem her seferinde yanlış döndürdüğünü ve JVM'yi her çalıştırdığımda java.lang.Compiler denetimlerinin (java.compiler) null olduğunu bildiriyor. OpenJDK ve Oracle JVM 1.7 denedim, her ikisi de aynı.JIT'yi elle java.lang.Compiler

i

$ jstat -printcompilation <PID> 

ile derleme istatistiklerini Ancak ben JIT başarılı olarak görebilirsiniz koşulları uyan bazı yöntem derler.

Herhangi bir yol varsa, java kodundan tetiklerim. hotspot VM's code'da da arama yapmaya çalıştım ancak kararın verildiği ve JIT'in başladığı sınıfı ve yöntemi bulamadım.

Düzenleme: Daha etrafa baktıktan sonra, compilationPolicy.cpp bu bulduktan sonra kararın bağlı olduğu yeri tam olarak bulamadım. Ben, (sadece düşünme) gibi bir şey

if(hot_count > Threshold){ 
    compile_method(methodHandle); 
} 

ancak bunun yerine buldum hariç ediyorum

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); 
    } 
    } 
} 

Bildiğim kadarıyla, yerli JVM kod izleme olarak im benim ana konu uzaklaşıyor. Hala kodunun java tarafında kullanmak için basit bir çözüm arıyorum.

+0

Emin misiniz Java 9. bölümünü oluşturmak üzere planlanmış olmasına rağmen

Ne yazık ki, henüz mevcut değil? Başvurduğunuz belgeler, ayarlanması gerekenlerin açık bir referansını yapar. System.out.println (System.getProperty ("java.compiler")); 'ile kontrol edebilirsiniz. – Makoto

+0

'System.out.println (System.getProperty (" java.compiler "))' 'kod yazdırır null.Ve belirli bir değer ayarlamak için herhangi bir belge bulamamalıyım bile kendimden bir değer ayarlamanız gerektiğinden emin değilim . –

cevap

2

Derleyici Denetimi özelliğine benzer bir şey istediğiniz gibi geliyor (http://openjdk.java.net/jeps/165). şu anda size `java.compiler` mülkiyet makinenizde etkin olduğunu

+0

Evet, daha spesifik programlı kontrol olmak için böyle bir şey istiyorum. Ama şu anki JDK'da java.lang.Compiler' sınıfının varlığını anlamıyorum. Bu sınıf, farklı satıcıların JDK'yı denetlemesi için bir özellikse, hotspot'un 'Derleyici'yi kullanmak için neden varsayılan bir uygulama sağlamadığı. –