En Java, quelles sont les implications en termes de performances et de ressources de l'utilisation
System.currentTimeMillis()
contre.
new Date()
contre.
Calendar.getInstance().getTime()
Si je comprends bien, System.currentTimeMillis()
est le plus efficace. Cependant, dans la plupart des applications, cette valeur longue devrait être convertie en une date ou un objet similaire pour faire quelque chose de significatif pour les humains.
En regardant le JDK, le constructeur le plus interne pour
Calendar.getInstance()
ceci:donc il fait déjà automatiquement ce que vous proposez. Le constructeur par défaut de Date contient ceci:
Il n'est donc vraiment pas nécessaire d'obtenir l'heure système spécifiquement, sauf si vous voulez faire un peu de calcul avec avant de créer votre objet Calendrier / Date avec. Je dois également recommander joda-time pour remplacer les propres classes de calendrier / date de Java si votre but est de travailler beaucoup avec les calculs de date.
la source
Si vous UTILISEZ une date, je vous conseille fortement d'utiliser jodatime, http://joda-time.sourceforge.net/ . Utilisation
System.currentTimeMillis()
pour les champs qui sont dates semble être une très mauvaise idée car vous vous retrouverez avec beaucoup de code inutile.La date et le calendrier sont sérieusement bousculés, et le calendrier est certainement le pire interprète de tous.
Je vous conseille d'utiliser
System.currentTimeMillis()
lorsque vous utilisez réellement des millisecondes, par exemple comme cecila source
Je préfère utiliser la valeur renvoyée par
System.currentTimeMillis()
pour toutes sortes de calculs et utiliser uniquementCalendar
ouDate
si j'ai vraiment besoin d'afficher une valeur lue par les humains. Cela empêchera également 99% de vos bogues d'heure d'été. :)la source
Sur ma machine, j'ai essayé de le vérifier. Mon résultat:
N'oubliez pas GC (si vous utilisez
Calendar.getInstance()
ounew Date()
)la source
Selon votre application, vous voudrez peut-être envisager d'utiliser à la
System.nanoTime()
place.la source
nanoTime
revient est relatif (généralement au début du programme) et serait insensé si vous tentiez de le transformer en date.J'ai essayé ceci:
Et le résultat a été:
Date (): 199
currentTimeMillis (): 3
la source
System.currentTimeMillis()
est évidemment le plus rapide car ce n'est qu'un appel de méthode et aucun garbage collector n'est requis.la source