【发布时间】:2012-01-15 11:08:52
【问题描述】:
我最近一直在研究基准测试,我一直对记录程序数据等感兴趣。我很想知道我们是否可以在我们的程序中实现我们自己的内存使用代码并有效地实现我们自己的时间消耗代码。我知道如何检查代码运行所需的时间:
public static void main(String[]args){
long start = System.currentTimeMillis();
// code
System.out.println(System.currentTimeMillis() - start);
}
我也看了Robust Java benchmarking, Part 1: Issues,这个教程很全面。显示System.currentTimeMillis(); 的负面影响。然后教程建议我们使用System.nanoTime();(让它更准确?)。
我还查看了Determining Memory Usage in Java 的内存使用情况。该网站显示了如何实施它。提供的代码看起来效率低下,因为该人正在调用
long L = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
在此之后,他调用System.gc(); (4 * 4) = 16 次。然后再次重复该过程。
这不也占内存吗?
总之,是否有可能在您的 java 程序中实现有效的基准测试代码?
【问题讨论】:
-
看到这篇文章stackoverflow.com/questions/4583175/benchmarking-java-programs 它有很好的建议。特别是你应该阅读this。
-
应避免使用 System.currentTimeMillis() 来测量性能,而应使用 System.nanoTime(),因为 currentTimeMillis 可能会“回到过去”,例如,如果 NTP 服务器将纠正机器的当前时间.
-
见this answer,也。
标签: java performance benchmarking