Blick auf den generierten Bytecode:
%Vor% generiert (verwende javap -c classname
)
Also (jdk1.6.0_18):
%Vor%erstellt
%Vor%während
%Vor%alle ergeben
%Vor%Allerdings ergab ein grober Leistungstest auf meinem Laptop fast keinen Unterschied in der Laufzeit zwischen den beiden (manchmal war ++ x schneller, manchmal x = x + 1 war schneller), also würde ich mir keine Sorgen machen die Auswirkungen auf die Leistung.
Zunächst sagt die Java Language Specification nichts über das Timing aus. Aber vorausgesetzt, wir verwenden einen typischen Compiler wie Suns javac, sehen wir, dass alle oben genannten Beispiele ( a++
, ++a
, a += 1
, a = a + 1
) entweder in etwas kompiliert werden könnten wie:
iinc
Anweisung, arbeitet an Variablen:
iadd
instuction, mit dem Stack (hier mit der Variable 1
als Speicher):
Es liegt am Compiler, den bestmöglichen Weg zu finden, sie zu kompilieren. Z.B. da ist kein Unterschied zwischen ihnen. Und es sollte keinen Unterschied zwischen den Aussagen geben - sie alle drücken das Gleiche aus - eins zu einer Zahl hinzufügen.
Das heißt, sowohl die iinc
als auch die iadd
Version können mit dem JIT zu etwas schnellem und plattformabhängigem kompiliert werden, und am Ende würde ich annehmen, dass eine normale Laufzeit beide Versionen in den gleichen Assemblercode kompiliert .
Mit meinem Compiler, * jdk1.6.0_20 *, verwenden die "increment" -Methoden sogar den gleichen Befehl.
%Vor%Dies ist die Demontage:
%Vor%Der Compiler sollte optimieren und es sollte keinen Unterschied geben. Beachten Sie jedoch, dass der Präfix-Inkrementoperator möglicherweise (abhängig vom Compiler) schneller ist als das Postfixäquivalent (auch in C ++ und C #):
++a
schneller als a++
, weil der Postfix-Operator eine temporäre Variable erstellen muss. Denken Sie über ihre Implementierung nach:
Präfix:
%Vor%Postfix:
%Vor%Es ist das gleiche, und heutzutage sollte es bei der Compiler-Optimierung nicht so sein. Um die Leistung zu erhöhen, sollten Sie andere größere Probleme wie Allocs überprüfen:)
Tags und Links java performance post-increment