JVMTI提供事件ContendedMonitorEnter
和ContendedMonitorEntered
来检测与使用synchronized
相关的事件。synchronized
只是一个ReentrantLock。
现在我还想跟踪与锁结构相关的事件:ReentrantLock
。我可以挂接其lock()
和unlock()
事件的方法入口/出口。然而,这些事件挂钩没有提供任何关于它们被调用对象的信息。因此,我无法区分不同的ReentrantLock
,因此无法记录任何关于当前锁定的锁的信息。
有其他方法可以跟踪这件事吗?
您必须自己对正在加载的类进行检测。这相当复杂,但幸运的是,我们有java_crw_demo.c,它与JDK一起提供(以及其他有用的示例)。在那里,您可以找到一个执行一些基本类型的插入的实现。你可以很容易地修改它来完成这项工作。我现在这样做是为了一些学术学生项目。