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

新手上路,请多包涵

我在 Internet 上看到我应该使用 System.nanoTime() 但这对我不起作用 - 它为我提供了毫秒精度的时间。我只需要我的函数执行前后的微秒数,这样我就知道需要多长时间。我正在使用 Windows XP。

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

这是一个例子:

 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() 有效。呸。

原文由 jao 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 451
1 个回答

我的猜测是,因为 System.nanoTime() 使用“最精确的可用系统计时器”,它显然在你的系统上只有毫秒精度,你不能得到更好的东西。

原文由 Zach Scrivena 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题