我要做的事情是,计算在一个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"); }
}
但这显然涉及编织代码,可能会更改其性能特征。