首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows XP上的System.nanoTime()

windows XP上的System.nanoTime()
EN

Stack Overflow用户
提问于 2011-10-22 19:05:54
回答 3查看 653关注 0票数 0

我刚在windows XP上找到了System.currentTimeMillis is not accurate,现在我用同样的代码尝试了System.nanoTime()

因为是1ms = 1,000,000ns,所以我认为结果应该是15,000,000ns,但事实并非如此。

请参阅示例代码:

代码语言:javascript
复制
public class NanoTime {
    public static void main(String[] args) {
        long start = 0;
        long end = 0;
        while (true) {
            if (start == 0) {
                start = System.nanoTime();
            } else {
                long current = System.nanoTime();
                if (current != start) {
                    end = current;
                    break;
                }
            }
        }
        System.out.println("The time interval of your OS: " + (end - start) + "ns");
    }
}

结果是:

代码语言:javascript
复制
The time interval of your OS: 655ns

看起来它比System.currentTimeMillis()好多了。但是为什么呢?我们能相信这个结果吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-22 19:09:20

如果您的Windows XP安装了SP3,那么您可以相信结果...在Windows平台上,JVM内部实现了nanoTime() ,使用的QueryPerformanceCounter/QueryPerformanceFrequency API基本上位于硬件抽象层,并使用了一些比较精确的CPU内部间隔指令。它只适用于时间间隔测量,而不适用于时间处理。

有关更详细的描述,请参阅http://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clockshttp://juliusdavies.ca/posix_clocks/clock_realtime_linux_faq.html

编辑-根据评论:

nanoTime被调用时,上面提到的函数是由JVM本身在内部使用的,这与JNI完全没有关系-它们不会暴露给Java代码!

EDIT 2-根据评论:

nanoTime()是准确测量流逝时间的正确工具,而currentTimeMillis是处理绝对时间的正确工具。

票数 4
EN

Stack Overflow用户

发布于 2011-10-22 19:08:35

为什么?

因为它不会试图以同样的方式做到准确。

在Javadoc中:

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。

因此,是的,它对于准确测量已用时间是很好的。它不适合给你一个绝对时间,你不会比System.currentTimeMillis()更准确,至少在没有与NTP等明确协调的情况下是这样的。

票数 4
EN

Stack Overflow用户

发布于 2011-10-22 19:10:33

要知道一个方法做了什么,最好的方法是阅读its javadoc。而不是通过实验来猜测它是做什么的。

返回最精确的可用系统计时器的当前值,以纳秒为单位。

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示从某个固定但任意的时间(可能是在将来,因此值可能是负数)开始的纳秒。这种方法提供了纳秒精度,但不一定是纳秒精度。不能保证值更改的频率。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7859043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档