运行 OpenJDK JVM 上的 cachegrind

Running cachegrind on OpenJDK JVM

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

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

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

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

perf 是进行此类测量的首选方法。 perf依赖于硬件计数器,它不修改执行的代码。要进行更深入的性能分析,可以使用英特尔 VTune 放大器。虽然它不是免费的,但可以使用试用版。