首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jvmti代理死锁

jvmti代理死锁
EN

Stack Overflow用户
提问于 2012-09-06 09:18:46
回答 2查看 299关注 0票数 3

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

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-10-02 05:45:15

是的,JVMTI Agent中存在死锁的可能性。JVMTI Reference声明:

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-07-04 21:22:27

当多个线程并发调用JVMTI代理时,我遇到了同样的问题。一个线程成功地调用了RawMonitorEnter并继续执行。在此之后,许多其他线程调用RawMonitorEnter并阻塞,正如预期的那样。持有原始监视器的线程随后调用RawMonitorExit,但是该函数似乎没有返回,这会导致死锁。

一种解决方法是将RawMonitorEnter/Exit和它们之间的逻辑包装在一个互斥锁中。这确保了一次只有一个线程尝试获取原始监视器。解决方法还可能完全否定对原始监视器的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12291756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档