Schleifenkonstruktion & Schnelligkeit

F

fo2

Gast
Hi,
ich habe eine Frage bezüglich der Konstruktion einer for Schleife.

Folgender Vergleich:
A:
Java:
for (int i=0; i<100; i++) {
   HandEvaluator he = new HandEvaluator();
   HandPotential hp = new HandPotential();
   handRank = he.handRank(card_1.toString() , card_2.toString() , hand.toString());
   potential = hp.ppot_raw(card_1.toString() , card_2.toString() , hand.toString() , true);
   negPotential = hp.getLastNPot();
   rolloutHandStrength = handRank*(1-negPotential) + (1-handRank)*potential;
}

B:
Java:
HandEvaluator he = new HandEvaluator();
HandPotential hp = new HandPotential();
for (int i=0; i<100; i++) {
   handRank = he.handRank(card_1.toString() , card_2.toString() , hand.toString());
   potential = hp.ppot_raw(card_1.toString() , card_2.toString() , hand.toString() , true);
   negPotential = hp.getLastNPot();
   rolloutHandStrength = handRank*(1-negPotential) + (1-handRank)*potential;
}

Was der Code jetzt genau macht sei mal unwichtig.
Inuitiv hätte ich gedacht, dass das Prog mit der zweiten Variante schneller ist, weil bei der ersten Variante unnötigerweise das Objekt ständig neu konstruiert wird.
Bei meinen Messungen ist die erste Variante aber 2 Sekunden schneller als die erste Variante.

Hat jemand eine Erklärung?!
 

AlexSpritze

Bekanntes Mitglied
Die Frage ist, wie du das misst... Wenn du das als Mikrobenchmark durchführst, wird dir hier jeder sagen, dass das kaum zielführend ist.

Obwohl es auch für mich intuitiv schneller ist mit der zweiten Variante.
 

Fu3L

Top Contributor
Lässt du beide Schleifen im gleichen Programmdurchlauf ausführen? Dann ändere mal die Reihenfolge, der HotSpot-Compiler ließe grüßen.
System.nanoTime() ist übrigends genauer.
 

Oben