首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中以微秒精度测量时间?

如何在Java中以微秒精度测量时间?
EN

Stack Overflow用户
提问于 2009-02-02 16:49:06
回答 12查看 58.4K关注 0票数 23

我在互联网上看到我应该使用System.nanoTime(),但这对我不起作用-它给了我精确到毫秒的时间。我只需要在函数执行之前和之后的微秒数,这样我就可以知道它需要多长时间。我使用的是Windows XP。

基本上,我有这样的代码,例如,在java链表中执行100万到1000万次插入。问题是我不能正确地测量精度;有时在较小的列表中插入所有内容所需的时间较短。

下面是一个例子:

代码语言:javascript
运行
复制
class test
{
    public static void main(String args[])
    {
        for(int k=1000000; k<=10000000; k+=1000000)
        {
            System.out.println(k);
            LinkedList<Integer> aux = new LinkedList<Integer>();
            //need something here to see the start time
            for(int i=0; i<k; i++)
                aux.addFirst(10000);
            //need something here to see the end time
            //print here the difference between both times
        }
    }
}

我这样做了很多次-有一个外部循环为每个k做了20次-但结果并不好。有时进行1000万次插入所需的时间比100万次要少,因为我现在使用的时间(System.nanoTime())得不到正确的测量时间。

编辑2:是的,我使用的是Sun JVM。

编辑3:我可能在代码中做了一些错误的事情,我会看看修改它是否如我所愿。

编辑4:我的错误,似乎System.nanoTime()起作用了。呼。

EN

Stack Overflow用户

发布于 2011-08-19 20:05:03

是的,System.nanoTime的准确性和精确度通常比System.currentTimeMillis好得多,但不能保证:在最坏的情况下,它可能会变得同样糟糕。

ThreadMXBean.getCurrentThreadCpuTime倾向于产生更小的时间,但它的分辨率不清楚,而且它还有更多的缺点(你真的想要CPU time?,平台相关的语义,在你的平台上支持吗?)。

使用这三种技术测量时间也有一定的成本,即需要时间本身,这可能会扭曲测量结果。成本与平台高度相关,但通常是成本(System.currentTimeMillis)、成本( << cost,System.nanoTime)和成本( << cost,ThreadMXBean.getCurrentThreadCpuTime)。

有关微型基准测试的一般信息,请参阅

票数 1
EN
查看全部 12 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/503877

复制
相关文章

相似问题

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