[Java] Temps d'exécution du programme

Pour faire des comparaisons de différents algorithmes j’ai besoin de récupérer le temps CPU qui a été utilisé pour le programme.

J’ai codé divers algorithmes de tris en Java et je voudrais faire des comparaisons. Seulement, je ne trouve pas comment le faire.
J’imagine qu’il existe certainement une méthode, mais google n’est pas mon pote aujourd’hui.

Merci d’avance :stuck_out_tongue:

Tu pourrais faire un truc comme ça:

Date dStartDate = new Date(); //effectuer le tri ici Date dEndDate = new Date(); long lExecTime = dEndDate.getTime() - dStartDate.getTime(); System.out.println("Temps d'exécution en millisecondes: " +  lExecTime );

Tu auras ton temps d’exécution plus le temps d’allocation d’un objet Date qui est négligeable.

[quote name=‘Twin’ date=’ 10 Nov 2004, 16:42’]Date dStartDate = new Date(); //effectuer le tri ici Date dEndDate = new Date(); long lExecTime = dEndDate.getTime() - dStartDate.getTime(); System.out.println("Temps d'exécution en millisecondes: " + lExecTime );

Tu auras ton temps d’exécution plus le temps d’allocation d’un objet Date qui est négligeable.
[right][post=“301559”]<{POST_SNAPBACK}>[/post][/right][/quote]

Oui, j’y ai pensé, mais le problème c’est que ce n’est pas le vrai temps d’exécution du programme.

Si un autre programme tourne en fond, il peut utiliser toutes les ressources CPU et notre mesure sera totalement faussée. Du coup si le programme s’arrête plus tard alors qu’on mesure l’algorithme suivant on ne pourra plus faire de comparaison.

C’est vrai mais tu peux minimiser ce phénomène en travaillant sur des ensembles plus gros (temps de traitement plus élevé donc plus fiable) et en fermant un maximum de programmes annexes. Je ne suis pas sûr qu’il existe en Java un moyen d’obtenir le “temps d’utilisation CPU”, c’est une donnée fortement dépendante de ton système d’exploitation et de ton hardware, choses que le code Java n’est pas sensé “voir”.

Et puis pour des algo de tris, la mesure du temps d’exécution “brut” devrait largement suffir à les départager. C’est pour trier quoi ?

Des fois que ça puisse aider:
Sorting algorithm complexity
Sorting Algo Demo

Je viens de faire une recherche rapide et si tu utilises un JDK 5.0, ton bonheur n’est pas loin : java.lang.management et particulièrement la méthode getCurrentThreadCpuTime de l’interface ThreadMXBean.
En espérant que ça te convienne … Je veux bien du feedback, j’ai jamais testé …

PM moi on a ça au labo, envoie moi ton mail… Tu parles/lis anglais?
Le temps en microsecondes ça t’intéresse ? µs

On bosse sur le temps réél avec Java sur le microcontrolleur Komodo (java powered)

[quote name=‹ prepa › date=’ 10 Nov 2004, 18:04’]Je viens de faire une recherche rapide et si tu utilises un JDK 5.0, ton bonheur n’est pas loin : java.lang.management et particulièrement la méthode getCurrentThreadCpuTime de l’interface ThreadMXBean.
En espérant que ça te convienne … Je veux bien du feedback, j’ai jamais testé …
[right][post=« 301600 »]<{POST_SNAPBACK}>[/post][/right][/quote]

J’ai testé cette méthode, mais je reçois des résultat étranges (beaucoup trop grand et parfois négatifs…).

j’ai donc utilisé la méthode getCurrentThreadCpuTime…

Mon bout de code (dans main) :

tempsT1 = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime(); tab.triBulle() tempsT2 = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime(); System.out.println("temps d'exécution tri à bulle : " + (tempsT2 - tempsT1))

où tab.triBulle est l’appel de la méthode qui fait l’algorithme de tri à bulle sur un tableau définit dans une classe contenant un tableau à trier.

Hum…
bon en fait j’ai fait un copier-coller malheureux (j’avais mis tempsT1 = … et tempsT1 = … :stuck_out_tongue: )

Mais j’ai toujours des choses bizarres.
Cette méthode est censée renvoyer le temps en nanosecondes. Or, pour le tri à bulle avec 10 éléments ainsi que pour le tri par tas avec 10 et 100 éléments, les temps CPU avant et après l’algorithmes sont identiques… ça me semble impossible… il doit forcément gaspiller un peu de temps CPU… non??