我在互联网上看到我应该使用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()起作用了。呼。
发布于 2011-08-19 20:05:03
是的,System.nanoTime的准确性和精确度通常比System.currentTimeMillis好得多,但不能保证:在最坏的情况下,它可能会变得同样糟糕。
ThreadMXBean.getCurrentThreadCpuTime倾向于产生更小的时间,但它的分辨率不清楚,而且它还有更多的缺点(你真的想要CPU time?,平台相关的语义,在你的平台上支持吗?)。
使用这三种技术测量时间也有一定的成本,即需要时间本身,这可能会扭曲测量结果。成本与平台高度相关,但通常是成本(System.currentTimeMillis)、成本( << cost,System.nanoTime)和成本( << cost,ThreadMXBean.getCurrentThreadCpuTime)。
有关微型基准测试的一般信息,请参阅
https://stackoverflow.com/questions/503877
复制相似问题