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?
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.
Tags und Links java