java - VisualVM 结果不同于手动测量

标签 java visualvm execution-time

我正在使用带有插件的 Eclipse 来运行 VisualVM。现在 VisualVM 说函数的方法调用总是在 180 毫秒左右返回,而如果我使用手动方法:

long start = System.nanoTime();
searchConnections(bsTree, connectionList);
double elapsedTimeInSec = (System.nanoTime() - start) * 1.0e-6;

我得到大约 50 毫秒!为什么会有差异?那么 VisualVM 中的测量是否错误?我需要对某些项目进行测量,这就是为什么尽可能精确地进行测量很重要。

最佳答案

要回答您的问题,没有一种简单的方法可以知道由于 JVM 的性质以及它将如何在运行时优化代码而导致这些值确切不同的原因。更不用说 System.nanotime() 是一个特定于平台的实现,我不会完全相信它的任何准确值(value)。

我更愿意相信 VisualVM 的结果而不是内联测量,因为 VisualVM 实际上正在测量它。如果您担心基准测试或想真正专注于获得准确的结果,我建议您使用 Caliper 等工具为了这个任务。

关于java - VisualVM 结果不同于手动测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321882/

相关文章:

java - 如何转换为指定的类类型?

java - 为 CPU 分析附加 Java VisualVM 导致 JVMTI 错误 66

Java VisualVM 挂起连接到从 Eclipse 启动的本地进程

java - 在 Virtuoso 服务上使用 Jena 的 SPARQL 查询执行时间

java - 将常规的 foreach 替换为流/lambda/方法引用

java - 如果可以提高可读性,冗余代码是否可以接受?

ubuntu - visualvm 不是 OpenJDK7 的一部分?

operating-system - 处理调度策略时Completion time和response time有什么区别

python - 如何通过替换 python 中的 for 循环来减少算法的执行时间

java - Swing,如何正确更新UI