Warum dauert der erste Aufruf des Konstruktors 10 mal länger als der andere?

8
%Vor%

Ich bekomme immer ähnliche Ergebnisse wie in 7806 660 517 . Warum dauert der erste Anruf 10 Mal länger als andere?

    
good_evening 17.08.2012, 19:56
quelle

2 Antworten

22

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 .

    
Louis Wasserman 17.08.2012, 19:57
quelle
3

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:

%Vor%

Ausgabe:

  

405 0 405

wo wie Ihr Ausgangscode ausgegeben:

  

7293 0 405

    
David Kroukamp 17.08.2012 20:25
quelle

Tags und Links