Sto provando a fare un benchmarking di JVM in esecuzione su varie piattaforme hardware e OS. Ho creato un algoritmo per esercitare le parti della JVM a cui sono interessato e ho intenzione di eseguire questo algoritmo molte volte per trovare una media decente.Eager java class loading
Quando eseguo il punto di riferimento, trovo che la prima corsa è significativamente più lungo di esecuzioni successive:
132ms
86ms
77ms
89ms
72ms
Il mio sospetto è che le classi vengono caricate pigramente, mettere una grande testa alla prima esecuzione. Anche se questa è davvero una caratteristica che presumo sia unica per ogni JVM, non è quella a cui sono interessato a questo punto.
Esiste un'opzione di riga di comando standard o una proprietà per caricare le classi in modo avido? o qualcuno ha altre teorie?
Non riesco a farlo compilare ulteriormente il codice. per favore approfondisci su questo, e perché solo dopo 10000 volte eseguire, si possono ottenere i risultati appropriati per micro-benchmarking (media) –
La "soglia del compilatore" predefinita è 10000. si veda '-XX: CompileThreshold = 10000' Questo può significare che il codice non è completamente ottimizzato finché non viene eseguito 10.000 e potresti voler ignorare queste esecuzioni per ottenere i risultati migliori. In ogni caso suggerisco di eseguire il test per almeno 2-10 secondi. –
in questo caso se do -XX: CompileThreshold = 10, allora siamo bravi a testarlo per un ciclo di 10000 (sì, so che verrà eseguito solo per alcuni millisecondi) –