J'ai besoin de mesurer le temps qu'il faut pour qu'une fonction soit complète en Java. Comment puis je faire ça?
Remarque:
Je veux mesurer la consommation de temps de la fonction , pas celle du programme complet.
J'ai besoin de mesurer le temps qu'il faut pour qu'une fonction soit complète en Java. Comment puis je faire ça?
Je veux mesurer la consommation de temps de la fonction , pas celle du programme complet.
Voici comment calculer le temps écoulé.
// Get current time
long start = System.currentTimeMillis();
// Do something ...
// Get elapsed time in milliseconds
long elapsedTimeMillis = System.currentTimeMillis()-start;
// Get elapsed time in seconds
float elapsedTimeSec = elapsedTimeMillis/1000F;
// Get elapsed time in minutes
float elapsedTimeMin = elapsedTimeMillis/(60*1000F);
// Get elapsed time in hours
float elapsedTimeHour = elapsedTimeMillis/(60*60*1000F);
// Get elapsed time in days
float elapsedTimeDay = elapsedTimeMillis/(24*60*60*1000F);
Le profiler est la bonne réponse si vous avez plus d'une fonction.
Un autre problème que je vois avec toutes les suggestions données jusqu'à présent, c'est qu'ils fonctionnent très bien pour une seule fonction, mais votre code sera jonché avec le calendrier de choses que vous ne pouvez pas désactiver.
Si vous savez comment faire de la programmation orientée aspects, c'est une bonne façon de garder la synchronisation de code en un seul endroit et de les appliquer de manière déclarative. Si vous utilisez quelque chose comme Log4J à la sortie de la valeurs, vous aurez la possibilité de l'éteindre ou de sur. C'est un homme pauvre profiler.
Jetez un oeil à AspectJ ou de Spring AOP.
Tous les extraits de code ci-dessus mesurer approximativement le temps écoulé depuis le temps que la méthode a été appelée pour le moment le retour de la méthode/lance une exception. De telles techniques ne sont pas l'adresse de la planification des threads, des pauses, en raison de la GC, etc.
Oui, certains profileurs va faire un emploi raisonnable.
Si vous utilisez la version 1.6 de Java à partir, vous pouvez utiliser le JMX VM de gestion et de surveillance. Par exemple, vous pouvez trouver ThreadMXBean.getCurrentThreadCpuTime() de valeur. Le calcul de la différence de cette valeur avant et après la méthode invoke vous donnera:
"... le total de temps PROCESSEUR pour le thread courant en nanosecondes. La valeur retournée est de nanosecondes de précision, mais pas nécessairement nanosecondes précision. Si la mise en œuvre de la distinction entre le mode utilisateur de temps et de système de mode de temps, les temps de calcul est le montant de temps que le thread courant a exécuté en mode utilisateur ou en mode système."
Si votre méthode engendre hors de threads de travail, votre calcul aurez besoin d'obtenir beaucoup plus complexe ;-)
En général, je recommande nez autour de la java.lang.gestion de package.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.