我想使用cachegrind在OpenJDK JVM上进行一些性能分析。(顺便说一句,如果这不是一个好主意,我想知道为什么。)
问题在于它会不断触发JVM中的断言。所以我该怎么做才能使用cachegrind运行。否则,请告诉我为什么这行不通。并且,如果您可以建议使用cachegrind的替代方法。(请注意,我已经研究并使用了perf。只是我很好奇像cachegrind / callgrind这样的工具在结果方面的不同。)
Valgrind及其基于它的工具通常对于性能分析而言不是很好。Valgrind是一种虚拟机,它不直接执行原始代码,而是对其进行翻译。在Valgrind下,程序的运行速度通常会慢得多,这可能会影响应用程序的执行情况。
此外,Valgrind不能与动态和自修改代码一起很好地工作。关于JVM的JIT编译,这可能会导致随机断言失败,并且您显然会观察到JVM崩溃。当Java在禁用JIT的情况下(即)运行时,Valgrind更加稳定-Xint
。但是,在-Xint
模式下进行概要分析并没有多大意义,因为它不能反映实际的应用程序性能。
perf
是进行此类测量的首选方法。perf
依靠硬件计数器,它不修改执行的代码。要进行更深入的性能分析,请使用英特尔VTune放大器。虽然它不是免费的,但是可以使用试用版。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句