Also habe ich einige Benchmarks auf verschiedenen Datenstrukturen durchgeführt und festgestellt, dass ich 10-20% Performance-Steigerungen hatte, als ich meine Variablen final deklarierte.Java final performance/optimization
Das hat mich wirklich überrascht. Ich dachte, das letzte Schlüsselwort würde nur dazu dienen, die Änderung in Variablen einzuschränken, und die Optimierung würde herausfinden, ob eine Variable einen konstanten Wert hat oder nicht. Hier
ist das Beispiel:
import javafx.scene.input.KeyCode;
import java.util.*;
public class Main {
static /*final*/ int LOOPS = Integer.MAX_VALUE/100;
static /*final*/ KeyCode[] keyCodes = KeyCode.values();
public static void main(String[] args) {
long startTime;
long endTime;
testEnumSet(); //warmup
startTime = System.nanoTime();
testEnumSet();
endTime = System.nanoTime();
System.out.println(" EnumSet: " + (endTime - startTime) + "ns");
}
static /*final*/ EnumSet<KeyCode> enumSet = EnumSet.noneOf(KeyCode.class);
static void testEnumSet() {
for (int i = 0; i < LOOPS; i++) {
/*final*/ KeyCode add = getRandomKeyCode();
if(!enumSet.contains(add)) enumSet.add(add);
/*final*/ KeyCode remove = getRandomKeyCode();
if(enumSet.contains(remove)) enumSet.remove(remove);
}
}
/*final*/ static Random random = new Random();
static KeyCode getRandomKeyCode() {
return keyCodes[random.nextInt(keyCodes.length)];
}
}
Mit final: .... EnumSet: 652 266 207ns
Ohne Finale: EnumSet: 802 121 596ns
Dies ist konsistent reproduzierbar!
Warum gibt es einen so großen Unterschied zwischen dem Code, der den endgültigen Code verwendet, und dem Code, der nicht verwendet wird? Warum wird es nicht optimiert? Und warum ist Final sowieso schneller, was ist der Unterschied im generierten Bytecode?
[Duplizieren] (http://stackoverflow.com/questions/4279420/does-use-of-final-keyword-in-java-improve-the-performance?rq=1) –
@ JarrodRoberson die am besten bewertete Antwort sagt, es gibt keinen Leistungszuwachs, aber meine Benchmarks zeigen ~ 20% Performancegewinn, also glaube ich nicht, dass dies ein Duplikat ist. – Jhonny007
top bewertet bedeutet nicht immer gemein * richtig * manchmal bedeutet es nur, dass die meisten Menschen falsch liegen. Genauso, wie Ihre Ergebnisse nicht immer reproduzierbar sind und "final" nicht immer messbare Vorteile bietet. –