Es System.currentTimeMillis () la mejor medida del rendimiento del tiempo en Java?

StackOverflow https://stackoverflow.com/questions/1073325

  •  21-08-2019
  •  | 
  •  

Pregunta

Es System.currentTimeMillis () la mejor medida del rendimiento del tiempo en Java? ¿Hay algunas pifias cuando se utiliza esto para comparar el tiempo antes de que se tomen medidas a la vez después de tomar la acción? ¿Hay una alternativa mejor?

¿Fue útil?

Solución

Espero que no - que es lo que yo uso cuando no uso nanoTime() .

Otros consejos

Además System.nanoTime(), JMX es probablemente la mejor opción viable:

java.lang.management.ManagementFactory.getThreadMXBean()

se puede consultar el tiempo de CPU hilo actual (medido en nanosegundos, pero no con nano segundos de precisión, como por System.nanoTime ())

Es posible usar cronómetro de Google guayaba lo que hace que la medición del tiempo súper fácil.

Si necesita mediciones de tiempo monótonas, System.nanoTime es una mejor opción. System.currentTimeMillis está sujeta a variaciones de tiempo UTC - segundos intercalares, actualizaciones NTP y jitter, así como los usuarios de ajustar el reloj del sistema *. Esto puede causar algunos fracasos espectaculares en ciertos tipos de aplicaciones de sincronización. System.nanoTime se supone que es inmune a todo eso.

Los problemas con System.nanoTime incluyen desbordamiento numérico periódica y la inexactitud de tiempo a largo plazo, por lo que System.currentTimeMillis mejor para períodos de tiempo más largos (siempre que los usuarios dejan el reloj del sistema solo). Tenga en cuenta que el horario de verano cambios de zona horaria y la hora no debe afectar System.currentTimeMillis.

* Windows "Sync con el tiempo de Internet" hace que los cambios graduales. Esto puede ser muy perjudicial, en contraposición a una correcta aplicación cliente NTP que "persigue" el servidor mediante el ajuste de la frecuencia base de tiempo del cliente.

Antes de Java 1.5 sólo había System.currentTimeMillis. Sin embargo, la granularidad del valor depende del sistema operativo subyacente y puede ser grande. En Windows XP A veces terminó con huecos de 20 ms. Oí Linux es mucho mejor con huecos en la gama de 1-2ms.

Con Java 1.5 también se puede utilizar System.nanoTime. Nunca he tenido problemas con éste.

Uno de gotcha es que esto mide en tiempo real transcurrido, tiempo de CPU no - por lo que es muy dependiente de la carga del sistema. Esto está bien si tu en una máquina de otra manera libre, pero a veces puede producir resultados interesantes si otros procesos están tratando de hacer el trabajo.

Este artículo tiene una solución intersting al problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top