System.nanoTime() : est-ce vraiment inutile ?
L'inquiétude soulevée à propos de System.nanoTime() découle de la perception selon laquelle Sur les systèmes multicœurs, les mesures de temps peuvent produire des résultats inattendus en raison des variations des compteurs de temps spécifiques au processeur. Il est théorisé qu'un thread programmé sur un processeur différent avec un compteur inférieur pourrait générer une différence de temps négative lors du calcul du temps passé.
Résoudre l'écart de compteur
Cependant, contrairement à l'hypothèse, System.nanoTime() garantit la cohérence entre les processeurs. Les systèmes d'exploitation modernes et les abstractions matérielles (par exemple, HAL) ont résolu le problème soulevé dans le message d'origine.
Windows :
Sur les systèmes Windows, les versions plus récentes de Sun JDK (avant 2011) utilise QueryPerformanceCounter de Windows plutôt que TSC. QueryPerformanceCounter garantit la synchronisation de l'heure entre les processeurs, éliminant ainsi le problème de divergence des compteurs.
Linux :
Les noyaux Linux à partir de la version 2.6.18 résolvent ce problème en détectant les bases de temps non synchronisées et en revenant à une source d'horloge fiable. Cette protection garantit un chronométrage cohérent sur plusieurs processeurs.
Autres plates-formes :
Les informations sont limitées concernant le comportement de System.nanoTime() sur d'autres plates-formes (par exemple, SPARC , Solaris, IBM JVM). Cependant, il est raisonnable de supposer que les systèmes d'exploitation et les JVM modernes ont mis en œuvre des protections similaires pour maintenir la cohérence temporelle.
Conclusion :
Bien que les préoccupations initiales soulevées aient pu être valable dans certains contextes historiques, System.nanoTime() n'est pas obsolète. Les systèmes d'exploitation et les JVM modernes ont mis en œuvre des protections pour garantir des mesures de temps fiables sur plusieurs processeurs. Par conséquent, System.nanoTime() reste un outil précieux pour mesurer le temps écoulé dans les applications Java.
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!