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.
Réponses
Trop de publicités?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.
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+
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.
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.