Hi,
ich weiß, Performance Messungen in Java sind sowieso so eine Sache, wegen Virtueller Maschine etc etc. Aber wenn man Tests wiederholt, sollten sich doch zumindest Tendenzen ergeben. Ich habe folgenden Test geschrieben, der einmal in einer Schleife eine einzelne Variable erhöht und einmal zwei Variablen erhöht und die Zeit misst:
Überraschenderweise kriege ich hier konstant bei test2 bessere Laufzeit (pro Test ca. 2,2s) als in test1 (pro Test ca. 3s), selbst wenn ich die beiden Tests in umgekehrter Reihenfolge ausführe. Woran kann das denn liegen? Oder habe ich irgendeinen komplett idiotischen Fehler gemacht?
ich weiß, Performance Messungen in Java sind sowieso so eine Sache, wegen Virtueller Maschine etc etc. Aber wenn man Tests wiederholt, sollten sich doch zumindest Tendenzen ergeben. Ich habe folgenden Test geschrieben, der einmal in einer Schleife eine einzelne Variable erhöht und einmal zwei Variablen erhöht und die Zeit misst:
Java:
public class PerformanceTest {
private static final long count = Integer.MAX_VALUE * 2L;
private static final int testCount = 10;
private static long startTime;
public static void main(String[] args) {
test1();
test2();
}
private static void test1() {
final long[] array = new long[testCount];
for (int test = 0; test < testCount; ++test) {
start();
long a = 0;
while (a < count) {
a++;
}
stop();
array[test] = a;
}
System.out.println(array);
}
private static void test2() {
final long[] array1 = new long[testCount];
final long[] array2 = new long[testCount];
for (int test = 0; test < testCount; ++test) {
start();
long a = 0;
long b = 0;
while (a < count) {
a++;
b++;
}
stop();
array1[test] = a;
array2[test] = b;
}
System.out.println(array1 + ", " + array2);
}
private static void start() {
startTime = System.currentTimeMillis();
}
private static void stop() {
final long endTime = System.currentTimeMillis();
System.out.printf("time: %d\n", endTime - startTime);
}
}
Überraschenderweise kriege ich hier konstant bei test2 bessere Laufzeit (pro Test ca. 2,2s) als in test1 (pro Test ca. 3s), selbst wenn ich die beiden Tests in umgekehrter Reihenfolge ausführe. Woran kann das denn liegen? Oder habe ich irgendeinen komplett idiotischen Fehler gemacht?