首页 > Java > java教程 > 正文

Java 中的 System.nanoTime() 仍然是可靠的时间测量工具吗?

DDD
发布: 2024-11-12 00:55:03
原创
1044 人浏览过

Is System.nanoTime() in Java Still a Reliable Time Measurement Tool?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板