System.nanoTime() en Java est-il vraiment inutile ?
Question :
A un article de blog intitulé « Méfiez-vous de System.nanoTime() en Java » soulève des inquiétudes quant au fait que sur les systèmes x86, System.nanoTime() peut renvoie potentiellement des valeurs de temps incorrectes en raison de l'utilisation de compteurs spécifiques au processeur. Dans un système multicœur, la planification des threads pourrait entraîner l'attribution d'un processeur avec un compteur inférieur, ce qui entraînerait des valeurs négatives pour les différences horaires.
Réponse :
Le les affirmations du billet de blog ont été rédigées en 2011 et ne sont plus exactes. Les mises à jour ultérieures du système d'exploitation ont résolu ces problèmes sous Windows et Linux.
Windows :
Sur Windows XP Service Pack 2 et versions ultérieures, System.nanoTime() utilise QueryPerformanceCounter /QueryPerformanceFrequency API, qui est implémentée par la couche d'abstraction matérielle (HAL) pour fournir une source de temps cohérente à travers processeurs.
Linux :
La fonction Linux clock_gettime(CLOCK_REALTIME) garantit que l'heure est cohérente sur tous les processeurs. À partir de la version 2.6.18 du noyau, une source d'horloge sécurisée est utilisée si des compteurs d'horodatage non synchronisés ou à fréquence variable sont détectés.
Autres architectures :
Les informations sont limitées disponible sur d'autres architectures, telles que SPARC et Solaris. Cependant, il est généralement admis que les machines virtuelles (VM) modernes fournissent une source de temps cohérente pour les systèmes d'exploitation invités, quel que soit le matériel sous-jacent.
Conclusion :
Système .nanoTime() reste une méthode valide pour mesurer les différences horaires en Java. Les préoccupations soulevées dans le billet de blog de 2011 ont été résolues et ne s'appliquent pas aux implémentations de systèmes modernes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!