我想使用cachegrind在OpenJDK JVM上进行一些性能分析。 (顺便说一句,如果这不是一个好主意,我想了解原因。)
问题是它在JVM中不断绊倒断言。那么我该怎么做才能使用cachegrind来运行。或者,请告诉我为什么这不起作用。如果你可以建议一个替代cachegrind。 (请注意,我已经查看并使用了perf。它只是因为我很好奇cachegrind / callgrind之类的工具在结果方面会有多么不同。)
答案 0 :(得分:1)
Valgrind及其基于它的工具通常不太适合性能分析。 Valgrind是一种虚拟机,它不直接执行原始代码,而是翻译它。在Valgrind下,程序通常运行得慢得多,这会影响应用程序的执行情况。
Valgrind也不适用于动态和自修改代码。关于JVM的JIT编译,这可能导致随机断言失败和您明显观察到的JVM崩溃。众所周知,当禁用JIT运行Java时,Valgrind会更加稳定,即-Xint
。但是在-Xint
模式下,分析没有多大意义,因为它不能反映实际的应用程序性能。
perf
是进行此类测量的首选方式。 perf
依赖于硬件计数器,它不会修改已执行的代码。对于更深入的性能分析,有英特尔VTune放大器。它不是免费的,但可以使用试用版。