115 votos

Medir el tiempo de ejecución de un método de Java

¿Cómo se calcula el tiempo de ejecución de un método en Java?

121voto

bakkal Puntos 13449

Puedes tomar instantáneas de la marca de tiempo antes y después, y luego repetir los experimentos varias veces para promediar los resultados . También hay perfiladores que pueden hacer esto por ti.


De "Java Platform Performance": Estrategias y Tácticas":

Con 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);
   }
}

Con una clase de StopWatch

Puedes usar esto StopWatch clase, y llamar a start() y stop antes y después del método.

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());
   }
}

Ver aquí .


Perfil de NetBeans:

Aplicación de rendimiento de la aplicación

Perfiles de rendimiento CPU a nivel de método rendimiento (tiempo de ejecución) . Puedes elegir el perfil de todo el aplicación o una parte de la aplicación.

Ver aquí .

77voto

Vitalii Fedorenko Puntos 17469

Para ser más preciso, yo usaría nanoTime() método en lugar de currentTimeMillis() :

long startTime = System.nanoTime();
myCall(); 
long stopTime = System.nanoTime();
System.out.println(stopTime - startTime);

En Java 8 (el formato de salida es ISO-8601):

Instant start = Instant.now();
Thread.sleep(63553);
Instant end = Instant.now();
System.out.println(Duration.between(start, end)); // prints PT1M3.553S

Guayaba Cronómetro :

Stopwatch stopwatch = new Stopwatch().start();
myCall();
System.out.println(stopwatch.stop());

49voto

Comprueba esto: System.currentTimeMillis .

Con esto puedes calcular el tiempo de tu método haciendo:

long start = System.currentTimeMillis();
class.method();
long time = System.currentTimeMillis() - start;

22voto

JJD Puntos 7539

En caso de que desarrolles aplicaciones para Android deberías probar el TimingLogger clase. Echa un vistazo a esto artículo que describe el uso de la TimingLogger clase de ayuda .

11voto

kinshuk4 Puntos 586

Si está escribiendo la aplicación, entonces la respuesta es usar System.currentTimeMillis o System.nanoTime sirven para el propósito señalado por la gente de arriba.

Pero si ya has escrito el código, y no quieres cambiarlo es mejor utilizar los interceptores de métodos de Spring. Así, por ejemplo, su servicio es :

public class MyService { 
    public void doSomething() {
        for (int i = 1; i < 10000; i++) {
            System.out.println("i=" + i);
        }
    }
}

Para evitar cambiar el servicio, puedes escribir tu propio método interceptor:

public class ServiceMethodInterceptor implements MethodInterceptor {
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        long startTime = System.currentTimeMillis();
        Object result = methodInvocation.proceed();
        long duration = System.currentTimeMillis() - startTime;
        Method method = methodInvocation.getMethod();
        String methodName = method.getDeclaringClass().getName() + "." + method.getName();
        System.out.println("Method '" + methodName + "' took " + duration + " milliseconds to run");
        return null;
    }
}

También hay API de código abierto disponibles para Java, por ejemplo BTrace . o el perfilador de Netbeans como sugieren @bakkal y @Saikikos. Gracias.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X