2014-12-27 12 views
7

Sto provando a creare una strategia JIT basata sulla struttura del metodo con informazioni di profilazione (fornita da JVM) ma non ho potuto attivare manualmente JIT. This documantation dice che posso eseguire JIT invocando java.lang.Compiler.compileClass() ma il metodo restituisce false ogni volta e la proprietà che controlla java.lang.Compiler (java.compiler) è nullo ogni volta che eseguo la JVM. Ho provato su OpenJDK e Oracle JVM 1.7 entrambi i risultati sono gli stessi.C'è un modo per attivare manualmente JIT diverso da java.lang.Compiler

Tuttavia quando osservo le statistiche di compilazione con

$ jstat -printcompilation <PID> 

posso vedere il successo JIT compila qualche metodo che si adatta alle condizioni.

Se esiste qualche modo, piuttosto lo avvio dal codice java. Ho provato a cercare anche in hotspot VM's code ma non sono riuscito a individuare la classe e il metodo in cui è stata presa la decisione e avviato JIT.

Modifica: Dopo aver guardato in giro ho trovato il compilationPolicy.cpp bu ancora non è stato possibile trovare la posizione esatta da cui dipende la decisione. Vorrei tranne qualcosa di simile (semplicemente pensando)

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

ma invece ha trovato questo,

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

Per quanto riguarda tracciare il codice JVM nativo, nel mese di ottenere via il mio argomento principale. Ancora in cerca di una soluzione semplice da utilizzare nel lato java del codice.

+0

Sei sicuro di avere la proprietà 'java.compiler' abilitato sulla vostra macchina? La documentazione a cui fai riferimento fa riferimento esplicito a quella che deve essere impostata. È possibile verificare con 'System.out.println (System.getProperty (" java.compiler "));'. – Makoto

+0

'System.out.println (System.getProperty (" java.compiler "));' codice stampa null.E non sono sicuro di dover impostare un valore da solo anche se non posso trovare alcuna documentazione per impostare un valore specifico . –

risposta

2

Sembra che si desideri qualcosa di simile alla funzione di controllo del compilatore (http://openjdk.java.net/jeps/165).

Purtroppo, non esiste ancora, anche se è attualmente prevista a far parte di Java 9.

+0

Sì, voglio qualcosa di simile, per essere un controllo programmatico più specifico. Ma non capisco l'esistenza della classe 'java.lang.Compiler' nell'attuale JDK. Se questa classe è una funzione per diversi fornitori per il controllo di JDK, perché l'hotspot non fornisce un'implementazione predefinita per utilizzare "Compilatore". –

Problemi correlati