Performance Messungen

Diskutiere Performance Messungen im Allgemeine Java-Themen Bereich.
B

bene2808

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:

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?
 
L

LimDul

Neben der Anmerkung von @thecain behaupte ich, dass bei so einem künstlichen Beispiel Dinge passieren, von denen man gar nichts weiß.

Die virtuelle Maschine macht Optimierungen: https://de.wikipedia.org/wiki/HotSpot

Es ist nicht auszuschließen, das aufgrund der Tatsache das in test2 mehr Anweisungen in der Schleife stehen eine Optimierung früher greift als bei test1 und im Endeffekt damit test2 schneller ist. Ist jetzt auch nur Kaffeesatzleserei von mir - aber bei so einem Konstrukt mit einer sich selbst optimierenden virtuellen Maschine ist die Aussagekraft solcher künstlichen, minimalen Tests extrem begrenzt - weil es eben keine realistischen Szenarien sind und man nicht alle Einflussgrößen kennt.
 
B

bene2808

Danke schon mal für die Antworten!:)

Gehört jetzt vielleicht nicht mehr ganz zum Thema, aber bin ein Maven Anfänger und kriege folgenden Fehler, wenn ich diesen Befehl:

mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=org.openjdk.jmh -DarchetypeArtifactId=jmh-java-benchmark-archetype

im Wurzelverzeichnis des Projekts ausführe:

Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate (default-cli) on project test: The desired archetype does not exist (org:jmh-java-benchmark-archetype:1.0)
 
Thema: 

Performance Messungen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben