Sortieralgorithmus mit Systemzeit messen

deggit_biber

Aktives Mitglied
Hallo,
Ich würde gerne wissen wie lange mein Sortieralgorithmus braucht.
Die folgende Methode gibt mir die Systemzeit an System.currentTimeMillis(); aber wie baue ich die in meinen Code ein?

Hier mal mein Code
Code:
public class Sortieren
{
    private int [] arrB;
    int temp;
   
    public Sortieren(int parrGroesse)
    {
        arrB = new int [parrGroesse];
       
        for (int i=0; i < arrB.length; i++)
        {
            arrB[i] = (int) (Math.random() * 1000);     
        } 
    }

public void insertionSortB()
    {
        int insertionSortVertauschungen = 0;
       
        for(int i=1; i < arrB.length; i++)
        {
            int insertion = arrB[i];
            int j = i;
                       
            while(j > 0 && arrB[j-1] > insertion)
            {
                insertionSortVertauschungen = insertionSortVertauschungen + 1;

                arrB[j] = arrB[j-1];
                j--;
            }
            arrB[j] = insertion;
        }
       
        System.out.println("InsertionSort / arrAayGröße: " +arrB.length);
        for (int i=0; i < arrB.length; i++)
        {
            System.out.print(arrB[i] + ", ");
        }
        System.out.println();
        System.out.println("Vertauschungen: " +insertionSortVertauschungen);
        System.out.println();
        System.currentTimeMillis();  //???????????????????????????????????
    }
}

vielen lieben Dank für euer Hilfe!!!

LG
Deggit
 

mrBrown

Super-Moderator
Mitarbeiter
Zeit davor und Zeit danach merken, der Unterschied dazwischen ist die Laufzeit ;)

Allerdings sollte man bei solchen Benchmarks noch einiges mehr beachten, System.currentTimeMillis zB ist eher ungeeignet...
 

deggit_biber

Aktives Mitglied
Ok einfach eine Variable stellen

long zeitvorher = System.currentTimeMillis();

und eine
long zeitnachher = System.currentTimeMillis();

dann
long zeit = zeitnachher - zeitvorher;

richtig?

was sollte ich den sonst noch beachten?

Wenn ich das so machen, gibt er mir bei einen Array der Größe 1000
eine 9 an!
9 Millisekunden? Komisch
 

mrBrown

Super-Moderator
Mitarbeiter
  • System.currentTimeMillis ist oft zu ungenau, stattdessen sollte man nanoTime() verwenden.

  • Für vernünftige Ergebnisse muss man die Funktion erst einige Male warmlaufen lassen, damit der JIT optimiere kann.

  • Die Messung sollte man n mal machen, und dann die Zeiten mitteln. Bei einem einzelnem Durchlauf kann uU kurzzeitig erhöhte Systemlast durch andere Prozesse oder GC zu stark verfälschten Ergebnissen führen
 

Flown

Administrator
Mitarbeiter
Für so Microbenchmarks benutzt man ordentliche Tools wie z.B. JMH. Wenn man das händisch macht, hat man nur einen Richtwert, da man auch JVM Aktivität mit misst!
 

JStein52

Top Contributor
muss man die Funktion erst einige Male warmlaufen lassen
Wenn man das händisch macht, hat man nur einen Richtwert, da man auch JVM Aktivität mit misst
Diese ganzen Messungen machen eh nur Sinn um verschiedene Algorithmen miteinander zu vergleichen bzw. um ihre Komplexität zu verifizieren. Wenn du den Algorithmus später irgendwo in einer Applikation verwendest wird er vermutlich auch nicht warmlaufen bzw. hast du immer JVM-Aktivität mit drin.
 

mrBrown

Super-Moderator
Mitarbeiter
Diese ganzen Messungen machen eh nur Sinn um verschiedene Algorithmen miteinander zu vergleichen bzw. um ihre Komplexität zu verifizieren. Wenn du den Algorithmus später irgendwo in einer Applikation verwendest wird er vermutlich auch nicht warmlaufen bzw. hast du immer JVM-Aktivität mit drin.

In den meisten Anwendungen laufen solche Funktionen durchaus häufiger, und damit bekommt auch der JIT Gelegenheit zum optimieren. Die ersten n Durchläufe sind meistens egal, sind aber um einiges langsamer, als der Durchschnitt und zögen den ziemlich runter, von daher macht warmlaufen schon Sinn.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
L Sortieralgorithmus Java Basics - Anfänger-Themen 17
2 Erste Schritte Sortieralgorithmus Array Java Basics - Anfänger-Themen 6
K Sortieralgorithmus Java Basics - Anfänger-Themen 10
Messoras Sortieralgorithmus graphisch darstellen Java Basics - Anfänger-Themen 6
M BubbleSort (Sortieralgorithmus) Java Basics - Anfänger-Themen 28
C Sortieralgorithmus grafisch darstellen Java Basics - Anfänger-Themen 3
Streeber Sortieralgorithmus Java Basics - Anfänger-Themen 8
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
G Sortieralgorithmus mit Rekursion funktioniert nicht Java Basics - Anfänger-Themen 26
S Hilfe zu einfachstem Sortieralgorithmus gesucht Java Basics - Anfänger-Themen 2
N sortieralgorithmus Java Basics - Anfänger-Themen 32
R Frage zu Sortieralgorithmus Java Basics - Anfänger-Themen 13
E Systemzeit ändern Java Basics - Anfänger-Themen 7
N Systemzeit ändern mit Java Java Basics - Anfänger-Themen 14
J Systemzeit auslesen Java Basics - Anfänger-Themen 4
M Systemzeit manipulieren Java Basics - Anfänger-Themen 11
D Systemzeit und sonstiges Java Basics - Anfänger-Themen 2
D Mit Java plattformunabhängig die Systemzeit einstellen Java Basics - Anfänger-Themen 8
M Systemzeit auslesen Java Basics - Anfänger-Themen 7
S Systemzeit setzen? Java Basics - Anfänger-Themen 7
N Java-Performance messen Java Basics - Anfänger-Themen 1
hello_autumn Zeit messen von ausgeführten Tools. Java Basics - Anfänger-Themen 1
T String länge messen in mm Java Basics - Anfänger-Themen 1
X Bildabschnitt anhand der Farbe und messen Java Basics - Anfänger-Themen 4
G Messen von Elementaren Operationen Java Basics - Anfänger-Themen 3
S Laufzeit bei rekursiver Methode messen Java Basics - Anfänger-Themen 6
H Netzwerktraffic messen Java Basics - Anfänger-Themen 1
D Zeit messen Java Basics - Anfänger-Themen 7
T Zeigerposition auf Grafik messen? Java Basics - Anfänger-Themen 5
S Zeit messen! Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben