Null / Objekt und Null / Null Vergleichseffizienz

8

Diese Frage führte mich zu einigen Tests:

%Vor%

Tangential zum anderen Beitrag , es ist interessant zu beachten, wie viel schneller ist der Vergleich, wenn die Object , die wir vergleichen, initialisiert wird. Die ersten beiden Zahlen in jeder Ausgabe sind, wenn Object null war und die letzten beiden Zahlen, wenn Object initialisiert wurde. Ich führte 21 zusätzliche Ausführungen des Programms, in allen 30 Ausführungen war der Vergleich viel schneller, wenn der Object initialisiert wurde. Was ist denn hier los?

    
Steve P. 17.06.2013, 09:35
quelle

1 Antwort

3

Wenn Sie die letzten beiden Schleifen an den Anfang verschieben, erhalten Sie die gleichen Ergebnisse, so dass Vergleiche irrelevant sind.

Es geht um JIT-Compiler-Warm-up. Während der ersten 2 Schleifen beginnt java mit der Interpretation von Bytecode. Nach einigen Iterationen stellt es fest, dass der Codepfad "hot" ist, also kompiliert er ihn zum Maschinencode und entfernt die Schleifen, die keine Wirkung haben, so dass Sie im Grunde System.nanotime und double arithmetisch messen.

Ich bin mir nicht wirklich sicher, warum zwei Loops langsam sind. Ich denke, nachdem es zwei heiße Pfade gefunden hat, beschließt es, die gesamte Methode zu optimieren.

    
zch 17.06.2013, 10:18
quelle

Tags und Links