Java - Während vs gegen vs Iterator Leistungstest
Node
In diesem Artikel wird die MethodeendTime - startTime verwendet, um die Leistung einer Schleife zu messen. Die JVM-Aufwärmoptimierung wird ignoriert. Das Ergebnis ist möglicherweise nicht konsistent oder genau.
Ein besserer Weg ist die Verwendung desOpenJDK JMH-Frameworks für die Benchmark-Tests, da es die Probleme beim Aufwärmen der JVM automatisch berücksichtigt (siehe dieses Beispiel -Java JMH benchmark tutorial)
Ein einfacher Java-Code zum Testen der Leistung der folgenden Schleifenmethoden:
-
While-Schleife
-
Für Schleife
-
Iteratorschleife
Vergleichen Sie in Java einfach endTime und startTime, um die verstrichene Zeit einer Funktion zu ermitteln.
long startTime = new Date().getTime();
// call something else
long endTime = new Date().getTime();
long difference = endTime - startTime;
System.out.println("Elapsed time in milliseconds: " + difference);
Während vs For vs Iterator
Ein Java-Code zum Schleifen vonList, der 1, 5, 10 und 15 Millionen Datensätze enthält.
LoopSimpleTest.java
package com.example.benchmark.bk;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
public class LoopSimpleTest {
private static List DATA_FOR_TESTING = Arrays.asList(createArray());
public static void main(String[] argv) {
LoopSimpleTest obj = new LoopSimpleTest();
obj.loopIterator();
obj.loopFor();
obj.loopWhile();
}
public void loopFor() {
System.out.println("\n--------- For Loop -------\n");
long startTime = new Date().getTime();
for (int i = 0; i < DATA_FOR_TESTING.size(); i++) {
String s = DATA_FOR_TESTING.get(i);
}
long endTime = new Date().getTime();
long difference = endTime - startTime;
System.out.println("For - Elapsed time in milliseconds: " + difference);
}
public void loopWhile() {
System.out.println("\n--------- While Loop -------\n");
long startTime = new Date().getTime();
int i = 0;
while (i < DATA_FOR_TESTING.size()) {
String s = DATA_FOR_TESTING.get(i);
i++;
}
long endTime = new Date().getTime();
long difference = endTime - startTime;
System.out.println("While - Elapsed time in milliseconds: " + difference);
}
public void loopIterator() {
System.out.println("\n--------- Iterator Loop -------\n");
long startTime = new Date().getTime();
Iterator iterator = DATA_FOR_TESTING.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
}
long endTime = new Date().getTime();
long difference = endTime - startTime;
System.out.println("Iterator - Elapsed time in milliseconds: " + difference);
}
private static String[] createArray() {
String sArray[] = new String[15_000_000];
for (int i = 0; i < 15_000_000; i++) {
sArray[i] = "Array " + i;
}
return sArray;
}
}
Ausgabe
D:\test>java -Xms1024m -Xmx1024m ArrayToList --------- Iterator Loop ------- Iterator - Elapsed time in milliseconds: 390 --------- For Loop -------- For - Elapsed time in milliseconds: 234 --------- While Loop ------- While - Elapsed time in milliseconds: 234

Die Iteratorschleife ist die langsamste und der Unterschied zwischen der for-Schleife und der while-Schleife ist nicht so signifikant.