mch*_*chr 4 java garbage-collection memory-leaks
我在下午7:41进行了Java堆转储,我正在使用Eclipse内存分析工具进行分析.堆转储包括20个会话对象.
在我的堆中的其中一个会话对象上使用Path to GC Roots命令显示以下3个对会话对象的引用.
当会话对象仍然具有强引用和弱引用时,它如何才能在终结器队列中?
在剩余的19个会话对象中,还有1个在终结器队列中,并且具有类似的弱引用.所有其他18个会话对象仅被弱引用.为什么GC没有清除这些弱的参考?
几点概括:
Cow*_*wan 10
我认为你在这里犯的错误就是这个部分:
Finalizer线程拥有的"未完成"链表的终结器引用.我的目标是排在第3位,最终确定.
如果你在谈论这个:
static private Finalizer unfinalized = null;
Run Code Online (Sandbox Code Playgroud)
在Sun公司Finalizer.java(一个Finalizer包含了next和prev Finalizer,因此"链表"的一部分,对于那些沿在家玩),那么这是不是事情的清单定稿.
Finalizer.add()在完成过程中,当对象无法访问时,调用不是(我认为你是假设的); 相反,该方法在Object的创建时被调用(例如<init>,在本机代码期间,对于任何覆盖的Object finalize().
next链中存在终结器并不意味着它即将完成; 是的
static private ReferenceQueue queue
Run Code Online (Sandbox Code Playgroud)
它拥有这样的对象.在链表中只是意味着它有一个finalize()方法.
因此,您的第一个点是红色鲱鱼,这是您保持物品可到达的第二点,第三点从第二点流出(因为WeakReference在物体可到达时不会被清除).
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |