Comment calculer le temps d'exécution d'une méthode en Java ?
Vous pourriez vouloir mettre en forme le résultat. Le temps en nanosecondes pour tout ce qui est valable va avoir beaucoup de chiffres.
Comment calculer le temps d'exécution d'une méthode en Java ?
Pour être plus précis, j'utiliserais nanoTime()
plutôt que currentTimeMillis()
:
long startTime = System.nanoTime();
myCall();
long stopTime = System.nanoTime();
System.out.println(stopTime - startTime);
En Java 8 (le format de sortie est ISO-8601) :
Instant start = Instant.now();
Thread.sleep(63553);
Instant end = Instant.now();
System.out.println(Duration.between(start, end)); // prints PT1M3.553S
Goyave Chronomètre :
Stopwatch stopwatch = Stopwatch.createStarted();
myCall();
stopwatch.stop(); // optional
System.out.println("Time elapsed: "+ stopwatch.elapsed(TimeUnit.MILLISECONDS));
Vous pourriez vouloir mettre en forme le résultat. Le temps en nanosecondes pour tout ce qui est valable va avoir beaucoup de chiffres.
Merci @Vitalii Fedorenko. est-ce que cela va être exact si la méthode implique beaucoup de transactions de la base de données ?
Je ne vois pas pourquoi le nombre de transactions de la base de données devrait affecter la précision, la seule chose à garder à l'esprit est que le temps de la requête de la base de données sera inclus dans le temps d'exécution total.
Vous pouvez prendre des instantanés de l'horodatage avant et après, puis répéter les expériences plusieurs fois pour obtenir des résultats moyens . Il existe également des profileurs qui peuvent le faire pour vous.
Avec System.currentTimeMillis()
class TimeTest1 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
long total = 0;
for (int i = 0; i < 10000000; i++) {
total += i;
}
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println(elapsedTime);
}
}
Avec une classe StopWatch
Vous pouvez utiliser ce StopWatch
et appeler start()
et stop
avant et après la méthode.
class TimeTest2 {
public static void main(String[] args) {
Stopwatch timer = new Stopwatch().start();
long total = 0;
for (int i = 0; i < 10000000; i++) {
total += i;
}
timer.stop();
System.out.println(timer.getElapsedTime());
}
}
Voir ici (archivé).
Application Performance Application
Profils de performance CPU au niveau de la méthode (temps d'exécution) . Vous pouvez choisir de profiler l'ensemble de application ou une partie de l'application l'application.
Voir ici .
currentTimeMillis
plutôt que nanoTime
. Vous ne voulez probablement pas que le timer cod ein la méthode testée. Pour avoir une idée du temps de chauffe et de la variation entre les résultats, j'ai tendance à mettre une boucle externe pour répéter le chronométrage cinq fois.
N'est-ce pas contraire à une plateforme multithread ? Comment peut-on en être sûr ? Je pense que l'utilisation d'un profileur sera une meilleure approche ici.
Regarde ça : System.currentTimeMillis .
Avec cela, vous pouvez calculer le temps de votre méthode en faisant :
long start = System.currentTimeMillis();
class.method();
long time = System.currentTimeMillis() - start;
J'ai juste besoin du temps pris pour l'exécution d'une méthode particulière dans un programme java.
Si vous développez des applications pour Android vous devriez essayer le TimingLogger
classe.
Jetez un coup d'œil à ces articles qui décrivent l'utilisation de l'outil de gestion de l'environnement. TimingLogger
classe d'aide :
Android a mis au point des utilitaires comme timeLogger et Textutils Merci de me le signaler :)
Vous pouvez penser à la programmation orientée aspect. Vous ne voulez pas encombrer votre code de timings. Vous voulez être en mesure de les activer et de les désactiver de manière déclarative.
Si vous utilisez Spring, jetez un coup d'oeil à leur Intercepteur de méthodes classe.
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.
1 votes
Lol, cela fait beaucoup de doublons :D dommage que lorsque vous fermez une question, vous ne pouvez en nommer qu'une seule :(
1 votes
Voici une classe de chronomètre pour java. Le format de sortie du temps est identique à celui de la classe Stopwatch de .NET. carlosqt.blogspot.com/2011/05/stopwatch-class-for-java.html
0 votes
Vous avez oublié de mentionner explicitement l'objectif de la mesure, qui pourrait avoir une influence sur la manière dont elle doit être effectuée. Quoi qu'il en soit, il semble que vous souhaitiez optimiser les performances. Dans ce cas, vous devriez absolument vous renseigner sur le "Micro Benchmarking". Bien que l'approche System.nanoTime() soit assez simple, il n'existe pas de moyen facile de mesurer exactement les performances d'un programme, car elles dépendent d'un grand nombre de facteurs différents (par exemple, le matériel, les autres logiciels fonctionnant sur le même système, la compilation juste-à-temps et à chaud, les données d'entrée, etc.)
0 votes
Voici un chronomètre que j'ai fabriqué, il est très simple à utiliser. gist.github.com/juanmf/4147a9b7010c7b04c003