Java 中的 System.nanoTime() 真的没用吗?
问题:
A标题为“谨防 Java 中的 System.nanoTime()”的博客文章引起了人们的担忧,即在 x86 系统上,System.nanoTime() 可能由于使用特定于 CPU 的计数器而返回不正确的时间值。在多核系统中,线程调度可能会导致分配较低计数器的处理器,从而导致时间差为负值。
答案:
该博文的说法写于 2011 年,现已不再准确。后续操作系统更新已解决 Windows 和 Linux 上的这些问题。
Windows:
在 Windows XP Service Pack 2 及更高版本上,System.nanoTime() 使用 QueryPerformanceCounter /QueryPerformanceFrequency API,由硬件抽象层 (HAL) 实现,为跨处理器提供一致的时间源。
Linux:
Linux Clock_gettime(CLOCK_REALTIME)函数确保所有处理器的时间一致。从内核版本 2.6.18 开始,如果检测到不同步或可变频率时间戳计数器,则使用安全时钟源。
其他架构:
信息有限适用于其他体系结构,例如 SPARC 和 Solaris。但是,通常假设现代虚拟机 (VM) 为来宾操作系统提供一致的时间源,无论底层硬件如何。
结论:
系统.nanoTime() 仍然是 Java 中测量时间差的有效方法。 2011 年博客文章中提出的问题已得到解决,但不适用于现代系统实现。
以上是Java 中的 System.nanoTime() 仍然是可靠的时间测量工具吗?的详细内容。更多信息请关注PHP中文网其他相关文章!