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

java – 检查垃圾收集器是否可以获取对象

发布时间:2020-12-14 23:55:37 所属栏目:Java 来源:网络整理
导读:有没有办法检查垃圾收集器是否可以获取对象? 在我的代码中的某处,我有一个对象的引用: MyObject mo = myObject; 然后,通过Eclipse Debugger,我得到了对象的内存位置.然后,我将引用设置为null: mo = null; 有没有办法检查以前引用的对象现在是否适合垃圾收
有没有办法检查垃圾收集器是否可以获取对象?

在我的代码中的某处,我有一个对象的引用:

MyObject mo = myObject;

然后,通过Eclipse Debugger,我得到了对象的内存位置.然后,我将引用设置为null:

mo = null;

有没有办法检查以前引用的对象现在是否适合垃圾收集,或者是否有某个地方另外引用它?

非常感谢,

斯特凡

解决方法

您不能在运行时使用任意对象执行此操作,事实上,确定性地执行此操作并非完全可能.但是,根据您的需要,有两种选择可能适合:

>将引用设置为null后进行堆转储,然后将其加载到堆分析器工具(如jhat)或支持此分析器的分析器中.这些工具应该让您遍历GC根路径,从而检查您的对象是否仍然可以访问.
>使用给定的ReferenceQueue将对象包装在PhantomReference中.当引用入队时,您知道该对象已被垃圾回收. (不幸的是,如果引用未加入,则可能是因为对象仍然可以访问,或者可能是因为GC尚未检查对象.与所有与GC相关的问题一样,垃圾收集不是确定性过程! )

总的来说,我同意最好的选择是了解内存泄漏问题并设计应用程序以避免它们.如果确实有内存泄漏,那么它应该足够明显,然后您可以集中精力找到问题(再次通过转储和分析堆不正确的对象).

上面的步骤相对耗时,并且不应该是每次更改后为了让自己安心而做的事情,而是您用来调查特定问题的工具.

(编辑:李大同)

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

    推荐文章
      热点阅读