Saltar al contenido

¿Cómo cronometro la ejecución de un método en Java?

La guía paso a paso o código que encontrarás en este post es la resolución más eficiente y válida que hallamos a esta duda o problema.

Solución:

Siempre existe la forma antigua:

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

long duration = (endTime - startTime);  //divide by 1000000 to get milliseconds.

Voy con la respuesta simple. Funciona para mi.

long startTime = System.currentTimeMillis();

doReallyLongThing();

long endTime = System.currentTimeMillis();

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

Funciona bastante bien. La resolución es obviamente solo al milisegundo, puede hacerlo mejor con System.nanoTime(). Existen algunas limitaciones para ambos (porciones de programación del sistema operativo, etc.) pero esto funciona bastante bien.

Haga un promedio de un par de ejecuciones (cuanto más, mejor) y obtendrá una idea decente.

¡Vamos chicos! Nadie mencionó la forma de guayaba para hacer eso (lo que podría decirse que es increíble):

import com.google.common.base.Stopwatch;

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

Lo bueno es que Stopwatch.toString() hace un buen trabajo al seleccionar las unidades de tiempo para la medición. Es decir, si el valor es pequeño, generará 38 ns, si es largo, mostrará 5m 3s

Incluso mejor:

Stopwatch timer = Stopwatch.createUnstarted();
for (...) 
   timer.start();
   methodToTrackTimeFor();
   timer.stop();
   methodNotToTrackTimeFor();

LOG.info("Method took: " + timer);

Nota: Google Guayaba requiere Java 1.6+

valoraciones y comentarios

Si conservas algún recelo y forma de ascender nuestro sección te recomendamos realizar una nota y con placer lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *