加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何识别JNI全局引用内存泄漏的原因?

发布时间:2020-12-14 05:23:00 所属栏目:Java 来源:网络整理
导读:我正在使用Tomcat,在停止我的Web应用程序之后,仍然引用了我的Web应用程序的classloader实例. 结果是显着的内存量(主要与静态数据相关)不会被释放.迟早会导致OutOfMemoryError. 我拿了一个堆栈,我意识到它由一个JNI global reference持有,这阻止了类加载器将
我正在使用Tomcat,在停止我的Web应用程序之后,仍然引用了我的Web应用程序的classloader实例.
结果是显着的内存量(主要与静态数据相关)不会被释放.迟早会导致OutOfMemoryError.

我拿了一个堆栈,我意识到它由一个JNI global reference持有,这阻止了类加载器将是garbage collected.

我的应用程序不使用JNI.我也不使用Apache Tomcat Native Library.我正在使用Sun / Oracle JDK.
我想跟踪这个全球参考的原因/起源.
(我的猜测是JVM内部引用了类加载器 – 但是为什么/在哪里?).

题:

有哪些方法/工具集可以实现?

UPDATE

看来bestsss是正确的,JNI全局引用已经被jvm调试模式引入.这有助于我,但它并没有回答这个问题,所以我仍然好奇地回答了将来可能会有帮助的问题.

解决方法

除了明显的情况:线程还有一个:

您是否在调试模式下使用应用程序?

除了系统之外,JVM不支持任何类加载器的引用,但它不涉及您.其余的JNI引用是线程或调试持有的对象(如果您不使用JNI并自己锁定对象).

JNI引用只是根,编辑你的答案,并发布这些引用所持有的对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读