2013-08-20 15 views
15

L'tiered compilation di HotSpot utilizza l'interprete fino a quando una soglia di invocazioni (per metodi) o iterazioni (per cicli) attiva una compilazione client con l'auto-definizione. La compilazione del client viene utilizzata fino a quando un'altra soglia di invocazioni o iterazioni attiva una compilazione del server.Quali sono i controlli CompileThreshold, Tier2CompileThreshold, Tier3CompileThreshold e Tier4CompileThreshold?

Printing HotSpot's flags mostra i seguenti valori di flag con -XX: + TieredCompilation.

intx CompileThreshold  = 10000 {pd product}   
intx Tier2CompileThreshold = 0  {product}   
intx Tier3CompileThreshold = 2000 {product}   
intx Tier4CompileThreshold = 15000 {product}   

Ci sono troppi flag per solo un compilatore client e server. Quali compilatori sono controllati da queste bandiere? Se non client e server, qual è lo scopo dei compilatori aggiuntivi?

Are CompileThreshold e Tier2CompileThreshold vengono ignorati in questo caso? Che cosa controlla Tier3CompileThreshold quando viene attivata una compilazione client? Che cosa controlla Tier4CompileThreshold quando viene attivata una compilazione del server?

risposta

18

I commenti in advancedThresholdPolicy.hpp discutono i diversi livelli del compilatore e le soglie. Vedi quel file per una discussione più profonda.

Il sistema supporta 5 livelli di esecuzione:

  • Livello 0 - interprete
  • Livello 1 - C1 con ottimizzazione completa (senza profilazione)
  • Livello 2 - C1 con i contatori invocazione e backedge
  • Livello 3 - C1 con profilo completo (livello 2 + MDO)
  • Livello 4 - C2

C1 è il compilatore client. C2 è il compilatore del server.

Nel caso comune, la compilazione va: 0 → 3 → 4. I casi atipici vengono utilizzati in base alle lunghezze di coda C1 e C2. Il livello 2 viene utilizzato quando la lunghezza della coda C2 è troppo lunga, in modo che il metodo possa essere eseguito circa il 30% più rapidamente fino a quando C2 può elaborare le informazioni di profilazione. Se il metodo è determinato per essere banale, viene compilato con Livello 1 poiché produrrà lo stesso codice di Livello 4.

Le soglie vengono regolate dinamicamente in base alla lunghezza delle code C1 e C2.

Problemi correlati