2016-03-30 12 views
0

Ich habe versucht, die Ausführungszeit mit ähnlichen Blöcken zu überprüfen.Derselbe Codeblock braucht eine andere Zeitdauer als

Beispielcode und Ausgabe unten sind,

public class Tester { 

    public static void main(String[] args) { 
     System.out.println("Run 1"); 
     List<Integer> list = new ArrayList<>(); 
     int i = 0; 
     long st = System.currentTimeMillis(); 
     while (++i < 10000) { 
      list.add(i); 
     } 
     System.out.println("Time taken :" + (System.currentTimeMillis() - st)); 

     System.out.println("Run 2"); 
     int j = 0; 
     List<Integer> list2 = new ArrayList<>(); 
     long ST = System.currentTimeMillis(); 
     while (++j < 10000) { 
      list2.add(j); 
     } 
     System.out.println("Time taken :" + (System.currentTimeMillis() - ST)); 

     System.out.println("Run 3"); 
     int k = 0; 
     List<Integer> list3 = new ArrayList<>(); 
     long ST2 = System.currentTimeMillis(); 
     while (++k < 10000) { 
      list3.add(k); 
     } 
     System.out.println("Time taken :" + (System.currentTimeMillis() - ST2)); 
    } 
} 

Ausgabe

Run 1 
Time taken :6 
Run 2 
Time taken :3 
Run 3 
Time taken :1 

Warum bin ich anders Zeitpunkt der Ausführung zu bekommen?

+3

Ihre Antwort wird wahrscheinlich für jeden Durchlauf des Programms variieren .. Warum wollen Sie genau die gleichen Werte erwarten .. Side note: Diese ist nicht der richtige Weg für Benchmarking-Zeit. – TheLostMind

+0

Dies ist abhängig von der Umgebung, Sie haben keine Kontrolle über die Ausführungszeit, dies kann für Umgebungen variieren. Sie können auch unterschiedliche Zeit für jeden Lauf erhalten. Ex I erhalten folgendes Ergebnis für Ihren Code Lauf 1 Zeit genommen: 1 Run 2 Zeit genommen: 0 Lauf 3 Zeit genommen: 1 –

+0

@TheLostMind Ich war diese Art von Verhalten bemerkt und wurde neugierig. Es wird großartig sein, wenn Sie mir erklären, welche Umweltfaktoren zu diesem Verhalten führen. – Kajal

Antwort

1

Dies ist wahrscheinlich just-in-time auf der Array-Liste Zusammenstellung und Hotspot-Optimierung, aber Sie können nicht zu 100% sicher sein.

aus, dass abgesehen, ist Ihre Stichprobengröße viel zu klein signifikant.

+0

Wenn ich die Bedingung in while (Variable <10000) ändern, verhält sich die Ausführung gleich. – Kajal

+1

Versuchen Sie Zahlen wie 10000000 für interessantere Ergebnisse. Bis zu einem gewissen Punkt werden Sie feststellen, dass die Ausführung schneller wird, später wird es aufgrund von Speicherverwaltungsproblemen wieder langsamer. – mtj

1

a) Da der Java-Code kompiliert wird einige Optimierungen Bytecode, um Ihren Code fertig ist, sowieso etwas, hat möglicherweise nicht mit Ihren Beobachtungen

b) Jede nachfolgende ähnliche Operation hat eine bessere Ausführungszeit, bis die jvm zu tun ist für diese Operation "aufgewärmt", zum Beispiel aufgrund von JVM-Lazy-Loading oder CPU-Caching.

c) Wenn Sie versuchen wollen Java Benchmarking überprüfen-Microbaum (JMH)

Verwandte Themen