En Java, ¿cuáles son las implicaciones de rendimiento y recursos del uso
System.currentTimeMillis()
vs.
new Date()
vs.
Calendar.getInstance().getTime()
Según tengo entendido, System.currentTimeMillis()
es el más eficiente. Sin embargo, en la mayoría de las aplicaciones, ese valor largo necesitaría convertirse a una Fecha o algún objeto similar para hacer algo significativo para los humanos.
Mirando el JDK, el constructor más interno para
Calendar.getInstance()
tiene esto:entonces ya hace automáticamente lo que sugieres. El constructor predeterminado de Date contiene esto:
Por lo tanto, realmente no es necesario obtener la hora del sistema específicamente a menos que desee hacer algunos cálculos matemáticos antes de crear su objeto Calendario / Fecha. También tengo que recomendar joda-time para usar como reemplazo de las propias clases de calendario / fecha de Java si su propósito es trabajar mucho con los cálculos de fecha.
fuente
Si está USANDO una fecha, le recomiendo que use jodatime, http://joda-time.sourceforge.net/ . Usar
System.currentTimeMillis()
campos que son fechas parece una muy mala idea porque terminarás con un montón de código inútil.Tanto la fecha como el calendario están seriamente alterados, y el calendario es definitivamente el peor de todos.
Le aconsejaría que lo use
System.currentTimeMillis()
cuando realmente esté operando con milisegundos, por ejemplo, asífuente
Prefiero usar el valor devuelto por
System.currentTimeMillis()
para todo tipo de cálculos y solo usoCalendar
oDate
si realmente necesito mostrar un valor que sea leído por humanos. Esto también evitará el 99% de sus errores de horario de verano. :)fuente
En mi máquina intenté comprobarlo. Mi resultado:
No te olvides de GC (si usas
Calendar.getInstance()
onew Date()
)fuente
Dependiendo de su aplicación, puede considerar usar en su
System.nanoTime()
lugar.fuente
nanoTime
regresa es relativo (generalmente al inicio del programa) y no tendría sentido si intentara convertirlo en una fecha.Intenté esto:
Y el resultado fue:
Fecha (): 199
currentTimeMillis (): 3
fuente
System.currentTimeMillis()
obviamente es el más rápido porque es solo una llamada al método y no se requiere recolector de basura.fuente