当我使用Java程序运行jvmti代理时,jvm似乎遇到了死锁。
在我的jvmti代理中,我在Agent_OnLoad()中创建一个原始监视器,并在每个回调函数的开头输入该锁,并在每个回调函数的结尾退出该锁。
我不知道这种僵局的原因。 jvmti代理中是否还有其他死锁可能性?

谢谢。

最佳答案

是的,JVMTI Agent中可能出现死锁。 JVMTI Reference指出:

同一线程可能多次进入监视器。线程必须
退出监视器与输入的次数相同。如果一个
在OnLoad期间输入监视器(在存在附加线程之前),并且
连接的线程存在时尚未退出,请输入
被认为发生在主线程上。

在这种情况下进行远程诊断可能很困难,但是我建议您看一下demo JVMTI applications如何处理原始锁的使用。使用专用功能enter_critical_sectionexist_critical_section。也许有帮助,否则尝试通过调试代理来查找导致死锁的回调。

关于deadlock - jvmti代理死锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12291756/

10-10 03:27