System.nanoTime():它真的没用吗?
对 System.nanoTime() 的担忧源于这样一种看法:在多核系统中,由于 CPU 特定时间计数器的变化,时间测量可能会产生意外结果。从理论上讲,调度到具有较低计数器的不同处理器的线程在计算所花费的时间时可能会产生负时间差。
解决计数器差异
但是,与假设相反,System.nanoTime() 确保了处理器之间的一致性。现代操作系统和硬件抽象(例如 HAL)已经解决了原始帖子中提出的问题。
Windows:
在 Windows 系统上,较新版本的 Sun JDK(2011 年之前)使用 Windows 的 QueryPerformanceCounter 而不是 TSC。 QueryPerformanceCounter 保证跨处理器的时间同步,消除计数器差异问题。
Linux:
Linux 内核 2.6.18 及以后通过检测不同步的时基并回退到解决此问题可靠的时钟源。这种保护措施可确保跨多个处理器保持一致的时间。
其他平台:
有关 System.nanoTime() 在其他平台(例如 SPARC)上的行为的信息有限、Solaris、IBM JVM)。然而,可以合理地假设现代操作系统和 JVM 已经实现了类似的保护来保持时间一致性。
结论:
虽然最初提出的担忧可能是System.nanoTime() 在某些历史背景下有效,但并未过时。现代操作系统和 JVM 已经实施了保护措施,以确保跨多个处理器进行可靠的时间测量。因此,System.nanoTime() 仍然是测量 Java 应用程序中经过时间的宝贵工具。
以上是System.nanoTime() 在现代多核系统中仍然相关吗?的详细内容。更多信息请关注PHP中文网其他相关文章!