998 votes

Comment puis-je le temps d'une méthode d'exécution de Java?

Il semble que ce devrait être plus simple que d'obtenir une méthode de temps d'exécution. Est-il un Timer classe utilitaire pour des choses comme la synchronisation de combien de temps une tâche nécessaire, etc? La plupart des recherches sur Google renvoyer les résultats pour les timers, planifier des threads et des tâches, ce qui n'est pas ce que je veux.

1417voto

Diastrophism Points 3092

Il y a toujours la bonne vieille méthode:

long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();

long duration = endTime - startTime;

247voto

MBCook Points 8316

Je pars avec la réponse simple. Fonctionne pour moi.

long startTime = System.currentTimeMillis();

doReallyLongThing();

long endTime = System.currentTimeMillis();

System.out.println("That took " + (endTime - startTime) + " milliseconds");

Il fonctionne très bien. La résolution n'est évidemment qu'à la milliseconde près, vous pouvez faire mieux avec le Système.nanoTime(). Il y a certaines limites à la fois (système d'exploitation annexe tranches, etc.) mais cela fonctionne assez bien.

En moyenne sur un couple de pistes (le plus sera le mieux) et vous allez obtenir une bonne idée.

198voto

Allez-y les gars! Personne n'a mentionné la Goyave façon de le faire (ce qui est sans doute génial):

import com.google.common.base.Stopwatch;

Stopwatch timer = Stopwatch.createStarted();
//method invocation
LOG.info("Method took: " + timer.stop());

La bonne chose est que Chronomètre.toString() fait un bon travail de sélection des unités de temps de la mesure. I. e. si la valeur est petite, ça va de la sortie 38 ns, si elle est longue, il va montrer 5m 3s

Encore plus beau:

Stopwatch timer = Stopwatch.createUnstarted();
for (...) {
   timer.start();
   methodToTrackTimeFor();
   timer.stop();
   methodNotToTrackTimeFor();
}
LOG.info("Method took: " + timer);

Remarque: Google Goyave nécessite Java 1.6+

91voto

James Schek Points 11070

Utiliser un profiler (JProfiler, Profileur Netbeans, Visual VM, Eclipse Profiler, etc). Vous obtiendrez les résultats les plus précis et le moins intrusif possible. Ils utilisent le haut-JVM mécanisme de profilage qui peut également vous donner des informations supplémentaires comme des traces de pile, les chemins d'exécution, et des résultats plus complets, si nécessaire.

Lors de l'utilisation d'un système entièrement intégré de profiler, c'est faily trivial le profil d'une méthode. Cliquez avec le bouton droit Profiler -> Ajouter aux Méthodes de Racine. Ensuite, exécutez le générateur de profils tout comme vous le faisiez un essai ou un débogueur.

43voto

skaffman Points 197885

Ce n'est probablement pas ce que tu voulais me dire, mais c'est une bonne utilisation de l'AOP. Fouet un proxy intercepteur autour de votre méthode, et ne le calendrier.

Le quoi, le pourquoi et le comment de l'AOP est plutôt au-delà de la portée de cette réponse, malheureusement, mais c'est ce que je pourrais probablement le faire.

Edit: Voici un lien pour le Printemps de l'AOP pour vous aider, si vous êtes désireux de. C'est le plus accessible de la mise en œuvre de l'AOP qui Iive venir à travers pour java.

Aussi, compte tenu de tout le monde est très simple suggestions, je dois ajouter que l'AOP est pour quand vous ne voulez pas des trucs comme timing pour envahir votre code. Mais dans de nombreux cas, ce genre de simple et facile d'approche est très bien.

Prograide.com

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.

Powered by:

X