Ich bekomme immer ähnliche Ergebnisse wie in 7806 660 517
. Warum dauert der erste Anruf 10 Mal länger als andere?
Weil die JVM an diesem Punkt zum ersten Mal eine Menge Klassen lädt. Sobald das erste System.nanoTime()
zurückkehrt, hast du System.class
und testx.class
bereits geladen, aber sobald System.out.println
ins Bild kommt, vermute ich, dass viele I / O-Klassen geladen werden, und das braucht etwas Zeit.
In jedem Fall ist dies nicht eine gute Benchmark-Technik; Sie sollten den JIT wirklich aufwärmen, indem Sie etwas für ~ 10000 Iterationen ausführen, bevor Sie mit der Messung beginnen. Verwenden Sie alternativ (und vorzugsweise) ein vordefiniertes Benchmarking-Tool wie Caliper .
Es ist definitiv wie Louis Wasserman, es dauert länger in seiner ersten Runde, da es alle notwendigen System
-Klassen laden muss. Sie können dies umgehen, indem Sie eine leere println()
aufrufen, bevor Sie neue Instanzen der Klasse erstellen. Denn schau, was passiert, wenn wir das tun:
Ausgabe:
405 0 405
wo wie Ihr Ausgangscode ausgegeben:
7293 0 405
Tags und Links java performance time nanotime