我正在使用带插件的Eclipse来运行VisualVM。现在VisualVM说函数的方法调用总是返回180ms左右,而如果我使用手动方法:
long start = System.nanoTime();
searchConnections(bsTree, connectionList);
double elapsedTimeInSec = (System.nanoTime() - start) * 1.0e-6;
我大约50ms!为什么会有区别?那么VisualVM中的测量结果是错误的吗?我需要对一些项目进行测量,这就是为什么它们尽可能精确地重要的原因。
答案 0 :(得分:1)
要回答您的问题,由于JVM的性质以及它在运行时如何优化代码,因此没有一种简单的方法可以确切知道值的不同之处。更不用说System.nanotime()是一个特定于平台的实现,我不会完全信任它的价值。
我更倾向于相信VisualVM对内联测量的结果,因为VisualVM实际上是在测量它。如果您担心基准测试或希望真正专注于获得准确的结果,我建议使用Caliper之类的工具来完成此任务。