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

前端之家收集整理的这篇文章主要介绍了java – 检查垃圾收集器是否可以获取对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法检查垃圾收集器是否可以获取对象?

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

MyObject mo = myObject;

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

mo = null;

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

非常感谢,

斯特凡

解决方法

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

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

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

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

猜你在找的Java相关文章