System.nanoTime() peut-il être fiable pour la mesure du temps ?
Selon le billet de blog « Méfiez-vous de System.nanoTime() dans Java", System.nanoTime() pourrait produire des valeurs de temps inexactes sur les systèmes x86 multicœurs en raison de compteurs spécifiques au processeur. Cela soulève des inquiétudes quant à son utilité pour des mesures de temps précises.
Cependant, un examen critique du message révèle qu'il est obsolète et ne reflète pas avec précision le comportement actuel de System.nanoTime(). Dans les systèmes d'exploitation et les JVM modernes, l'implémentation de System.nanoTime() a évolué pour résoudre les problèmes potentiels soulevés dans le billet de blog.
La vraie nature de System.nanoTime()
L'explication de Sun, telle que fournie dans le commentaire cité de David Holmes, révèle que System.nanoTime() s'appuie sur QueryPerformanceCounter/QueryPerformanceFrequency API. Le mécanisme par défaut utilisé par cette API dépend de la couche d'abstraction matérielle (HAL).
Windows
Sous Windows XP Service Pack 2 et versions ultérieures, l'implémentation par défaut a changé du compteur d'horodatage du processeur (TSC) au minuteur de gestion de l'alimentation (PMTimer). Cela a été fait pour résoudre les problèmes de synchronisation et la variabilité de fréquence du TSC.
Linux
Linux a également rencontré des problèmes similaires avec les TSC et a mis en œuvre une solution pour garantir la cohérence entre les processeurs. Dans les versions 2.6.18 et supérieures du noyau, une source d'horloge sécurisée est sélectionnée pour éviter les incohérences temporelles. PowerPC a toujours eu une base de temps synchronisée, ce qui rend ce problème moins répandu.
Autres plates-formes
L'article ne fournit pas d'informations spécifiques sur SPARC ou Solaris, ni adresser les JVM IBM. Cependant, il est probable que ces plateformes aient également adopté des mécanismes pour garantir l'exactitude de System.nanoTime().
Conclusion
Les préoccupations soulevées dans le billet de blog « Attention de System.nanoTime() en Java" ne sont plus valables pour les systèmes d'exploitation et les JVM modernes. System.nanoTime() fournit une méthode précise et fiable pour mesurer le temps dans la plupart des scénarios pratiques. Si vous avez besoin d'une synchronisation de très haute précision, il est recommandé d'explorer des bibliothèques spécifiques au système d'exploitation ou spécialisées adaptées à des configurations matérielles spécifiques.
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!