0

我想使用 cachegrind 在 OpenJDK JVM 上进行一些性能分析。(顺便说一句,如果这不是一个好主意,我想了解原因。)

问题是它不断地在 JVM 中触发断言。那么我该怎么做才能使用 cachegrind 来运行呢?否则,请告诉我为什么这行不通。如果您可以建议替代缓存研磨。(请注意,我已经查看并使用了 perf。只是我很好奇像 cachegrind/callgrind 这样的工具在结果方面会有多么不同。)

4

1 回答 1

1

Valgrind 和基于它的工具通常不适合性能分析。Valgrind 是一种虚拟机,它不直接执行原始代码,而是对其进行翻译。程序在 Valgrind 下运行速度通常要慢得多,这会影响应用程序的执行场景。

Valgrind 也不能很好地处理动态和自修改代码。对于 JVM 的 JIT 编译,这可能会导致您显然观察到的随机断言失败和 JVM 崩溃。众所周知,当 Java 在禁用 JIT 的情况下运行时,Valgrind 会更加稳定,即-Xint. 但是-Xint模式分析没有多大意义,因为它不能反映真实的应用程序性能。

perf是进行这种测量的优选方式。perf依赖于硬件计数器,它不会修改执行的代码。对于更深入的性能分析,有 Intel VTune Amplifier。虽然它不是免费的,但可以使用试用版。

于 2015-07-13T10:34:51.500 回答