Quels types utiliser pour réaliser cela en Java ?
La réponse courte est long
. Maintenant, plus sur la façon de mesurer...
System.currentTimeMillis()
La manière "traditionnelle" de procéder est en effet d'utiliser [System.currentTimeMillis()
](http://java.sun.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()) :
long startTime = System.currentTimeMillis();
// ... do something ...
long estimatedTime = System.currentTimeMillis() - startTime;
o.a.c.l.t.StopWatch
Notez que Commons Lang a un Chronomètre qui peut être utilisée pour mesurer le temps d'exécution en millisecondes. Elle possède des méthodes comme [split()
](http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/time/StopWatch.html#split()) , [suspend()
](http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/time/StopWatch.html#suspend()) , [resume()
](http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/time/StopWatch.html#resume()) etc. qui permettent de prendre des mesures à différents moments de l'exécution et que vous pouvez trouver pratiques. Jetez-y un coup d'œil.
System.nanoTime()
Vous pouvez préférer utiliser System.nanoTime()
si vous recherchez des mesures extrêmement précises du temps écoulé. Extrait de sa javadoc :
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
Jamon
Une autre option serait d'utiliser JAMon un outil qui rassemble statistiques (temps d'exécution, nombre d'occurrences, temps d'exécution moyen, min, max, etc.) pour tout code intervenant entre les méthodes start() et stop(). Ci-dessous, un exemple très simple :
import com.jamonapi.*;
...
Monitor mon=MonitorFactory.start("myFirstMonitor");
...Code Being Timed...
mon.stop();
Vérifiez cet article sur www.javaperformancetunning.com pour une belle introduction.
Utilisation de la POA
Enfin, si vous ne voulez pas encombrer votre code avec ces mesures (ou si vous ne pouvez pas modifier le code existant), alors la POA serait une arme parfaite. Je ne vais pas en discuter très profondément mais je voulais au moins le mentionner.
Ci-dessous, un aspect très simple utilisant AspectJ et JAMon (ici, le nom court du pointcut sera utilisé pour le moniteur JAMon, d'où l'appel à thisJoinPoint.toShortString()
):
public aspect MonitorAspect {
pointcut monitor() : execution(* *.ClassToMonitor.methodToMonitor(..));
Object arround() : monitor() {
Monitor monitor = MonitorFactory.start(thisJoinPoint.toShortString());
Object returnedObject = proceed();
monitor.stop();
return returnedObject;
}
}
La définition des raccourcis pourrait être facilement adaptée pour surveiller n'importe quelle méthode en fonction du nom de la classe, du nom du paquet, du nom de la méthode ou de toute combinaison de ces éléments. La mesure est vraiment un cas d'utilisation parfait pour la POA.
1 votes
Duplicatas possibles : stackoverflow.com/questions/180158 , stackoverflow.com/questions/567659 y stackoverflow.com/questions/503877 .
1 votes
El Question liée n'est pas un doublon. Le titre de cette question est trompeur. Le contenu de cette question porte sur l'accès à l'heure actuelle à partir de l'horloge de l'ordinateur. Les réponses impliquent ` System.currentTimeMillis()` et
System.nanoTime()
. Cette question se concentre ici sur le calcul du temps écoulé entre deux moments, sans tenir compte de la récupération de l'heure actuelle.