2013-04-15 10 views
2

Comment mesurer le coût en temps de l'exécution d'un programme Java? Comment estimer le coût en temps de mon programme. (Le programme est en cours d'exécution dans Eclipse)Comment mesurer le coût en temps?

code:

import java.util.Scanner; 

public class S1_4 { 

public static void main(String[] args) { 
    int i,j,k=1; 
    int[] table = new int[1000001]; 
    for(i = 2;i<1000000;i++) 
    { 
     if(table[i]==0) 
     { 
     for(j=1;i*j<999999;j++) 
      table[i*j]=k; 
      k++; 
     } 
    } 

    int a; 
    Scanner cin = new Scanner(System.in); 

    while(cin.hasNext()) { 
     a = cin.nextInt();   
     System.out.println(table[a]); 
    } 
    cin.close(); 
} 

} 
+1

Avez-vous vu: http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java? – harpun

+0

En fait, il y a une approche AOP (aspectj, par exemple) si vous ne voulez pas changer le code existant. –

Répondre

5

Utilisation System.nanoTime() au lieu de System.currentTimeMillis(), parce que currentTimeMillis() dépend de l'horloge du système, mais nanoTime() retourne un temps reletive, ne dépend pas des horloges du système.

Si l'horloge de votre système a changé entre les deux appels de currentTimeMillis(), l'intervalle de temps est sans valeur.

long start = System.nanoTime(); 
    //time consuming code here. 
    //... 
    long end = System.nanoTime(); 
    long used = end-start; 
    System.out.println("used:"+TimeUnit.NANOSECONDS.toMillis(used)+" ms"); 

Voir here pour plus de détails.

1
public static void main(String[] args) { 
    long startTime = System.currentTimeMillis(); 
    ... 
    System.out.println("Time taken-"+(System.currentTimeMillis() -startTime)); 
} 
0

Il est plus difficile de mesurer le temps nécessaire pour exécuter une méthode si la méthode prend très peu de temps. Le compteur nano n'est pas assez stable. Je suggère d'exécuter la méthode plusieurs fois et de mesurer le temps de fonctionnement combiné. Cela permettra également au compilateur JIT de l'optimiser afin que vous sachiez combien cela prendrait réellement au moment de l'exécution.

Vous pouvez utiliser jmeter ou un autre framework de test de perf ou vous pouvez écrire votre propre boucle pour exécuter le code plusieurs fois. Les deux autres réponses vous donnent de bonnes indications sur la façon de mesurer le temps qu'un code prend. Je vous recommande de mesurer le temps d'un grand nombre de passages (par exemple 10k) au lieu d'un seul passage.

Questions connexes