À partir de cet Oracle blog:
System.currentTimeMillis()
est mis en œuvre à l'aide de la
GetSystemTimeAsFileTime méthode, qui se contente de lire le bas
le temps de résolution de la valeur du jour que Windows conserve. La lecture de ce
une variable globale est naturellement très rapide autour de 6 cycles selon
l'information publiée.
System.nanoTime()
est mis en œuvre à l'aide de la
QueryPerformanceCounter/ QueryPerformanceFrequency API
(si disponible,
sinon, il retourne currentTimeMillis\*10\^6)
.
QueryPerformanceCounter(QPC)
est mis en œuvre de différentes façons
selon le matériel, il est en cours d'exécution sur. Typiquement, il va utiliser
le programmable interval timer (PIT), ou l'alimentation ACPI
gestion de la minuterie (PMT), ou au niveau de la CPU timestamp-compteur (TSC).
Accès à la FOSSE/PMT exige l'exécution de la lenteur de port d'e/S instructions
et comme un résultat, le temps d'exécution pour la QPC est de l'ordre de
microsecondes. En revanche la lecture de la TSC est de l'ordre de 100 horloge
cycles (lire la TSC de la puce et de la convertir en une valeur de temps
basé sur la fréquence de fonctionnement).
Peut-être cette réponse à la question. Les deux méthodes utilisent différents nombre de cycles d'horloge, ce qui résulte en vitesse lente de la, plus tard.
Plus loin dans ce blog dans la section conclusion:
Si vous êtes intéressé à mesurer/calculer le temps écoulé, puis utilisez toujours le Système.nanoTime(). Sur la plupart des systèmes, il donnera une résolution de l'ordre de quelques microsecondes. Sachez cependant, cet appel peut également prendre microsecondes à exécuter sur certaines plates-formes.