我要做的事情是,计算在一个JVM应用程序的执行过程中发生了多少次锁定。 (我知道每次运行时锁号可能会更改,但我只想获取平均数)。我无法更改该应用程序,因为它是一个基准。

我尝试使用JRockit-JDK,但是有两个问题:


-Djrockit.lockprofiling = true不会给我个人资料信息(link);
“ -Xverbose:locks”打印正确的信息吗?


我使用的平台是Ubuntu Server。
任何建议对此将不胜感激。

最佳答案

之前,我已经将AspectJ与切入点一起使用,该切入点可检测锁定和计数器,即

public aspect CountLocks{

   private static AtomicInteger locks = new AtomicInteger();

   before(Object l) : lock() && args(l) { locks.incrementAndGet(); }

   after() : execution(void main(String[])) { System.out.println(locks+" locks"); }

}


但这显然涉及编织代码,可能会更改其性能特征。

10-06 09:59