我想使用cachegrind在OpenJDK JVM上執行一些性能分析。 (順便說一下,如果這不是一個好主意,我想明白爲什麼。)在OpenJDK JVM上運行cachegrind
問題是它一直在JVM中跳出斷言。那麼我能做些什麼來獲得使用cachegrind的運行。否則,請告訴我爲什麼這不起作用。如果你可以建議一個替代cachegrind。 (請注意,我已經看過並使用過perf了,只是我很好奇cachegrind/callgrind這樣的工具在結果上會有多不同)。
我想使用cachegrind在OpenJDK JVM上執行一些性能分析。 (順便說一下,如果這不是一個好主意,我想明白爲什麼。)在OpenJDK JVM上運行cachegrind
問題是它一直在JVM中跳出斷言。那麼我能做些什麼來獲得使用cachegrind的運行。否則,請告訴我爲什麼這不起作用。如果你可以建議一個替代cachegrind。 (請注意,我已經看過並使用過perf了,只是我很好奇cachegrind/callgrind這樣的工具在結果上會有多不同)。
Valgrind和基於它的工具通常不太適合性能分析。 Valgrind是一種虛擬機器,它不直接執行原始代碼,而是轉換它。 Valgrind下的程序通常運行速度較慢,這可能會影響應用程序的執行情況。
另外Valgrind不能很好地處理動態和自修改代碼。關於JVM的JIT編譯,這可能會導致隨機聲明失敗和JVM崩潰,您顯然會觀察。當Java運行JIT禁用時,Valgrind被稱爲更穩定,即-Xint
。但在-Xint
模式分析沒有多大意義,因爲它不反映真正的應用程序性能。
perf
是做這種測量的首選方法。 perf
依靠硬件計數器,它不會修改執行的代碼。對於更深入的性能分析,有英特爾VTune放大器。雖然它不是免費的,但是可以使用試用版。