Java 如何在JVMTI中跟踪锁定事件

Java 如何在JVMTI中跟踪锁定事件,java,jvmti,Java,Jvmti,JVMTI提供了events ContempedMonitorEnter和ContempedMonitorEntered来检测与使用synchronized相关的事件。synchronized只是一个可重入锁定 现在我还要跟踪与锁结构相关的事件:ReentrantLock。我可以钩住方法进入/退出它的锁定和解锁事件。但是,这些事件挂钩不提供有关调用它们的对象的任何信息。因此,我无法区分不同的ReentrantLock,也无法记录关于当前锁定的锁的任何信息 有没有其他方法来跟踪这一点?您必须自己为

JVMTI提供了events ContempedMonitorEnter和ContempedMonitorEntered来检测与使用synchronized相关的事件。synchronized只是一个可重入锁定

现在我还要跟踪与锁结构相关的事件:ReentrantLock。我可以钩住方法进入/退出它的锁定和解锁事件。但是,这些事件挂钩不提供有关调用它们的对象的任何信息。因此,我无法区分不同的ReentrantLock,也无法记录关于当前锁定的锁的任何信息


有没有其他方法来跟踪这一点?

您必须自己为正在加载的类插入指令。这相当复杂,但幸运的是,我们有java_crw_demo.c,它与其他有用的示例以及JDK一起提供。在那里,您可以找到一个执行一些基本类型的插装的实现。你可以很容易地修改它来完成这项工作。
我现在为一些学术学生项目做这项工作。

但是对于更有趣的插装,使用ASM之类的插装库似乎更有用,不是吗?ASM将使插装更容易。因此,这基本上会迫使您使用Java代理,不是吗?不,不会。我想说的是,ASM可能比JVMTI更适合静态插装,因为它更容易使用。是的,但是ASM是通过java代理使用的,不是吗?