垃圾收集-孤立的LinkedList链接

垃圾收集-孤立的LinkedList链接,第1张

垃圾收集-孤立的LinkedList链接

看起来确实有些奇怪。可能是因为它明确地拆除了列表,是为了清除现有迭代器和子列表以及父列表的列表。

当然,不能加快垃圾收集的速度。垃圾收集器不会遍历不可访问对象中的引用,因此将其为null不会有任何区别。

更新

该方法的更新版本具有以下注释:

// Clearing all of the links between nodes is "unnecessary", but:// - helps a generational GC if the discarded nodes inhabit//   more than one generation// - is sure to free memory even if there is a reachable Iterator

因此,看来GC至少在某些情况下是有好处的。

假设

Node
年龄较大的a 中包含对年龄较小的对象(例如a
Node
或元素)的引用。当收集年轻一代时,该引用成为“根”,即使年轻一代
Node
无法访问,也导致保留了年轻一代对象。这种状态一直持续到收集到较老的一代为止。老一辈人很少被收集。

如果遍历列表并将其拆除,则包含旧->新引用的变量将分配给

null
。该分配的写屏障导致(立即或在GC时)原始引用不再是“根”。这样,现在就可以收集年轻一代中的对象了,并且它最终不会“持久化”到老一代中(这带来了需要收集该一代的时间)。

据推测,GC的收益要比取消选择清单的成本要高得多……无论是在平均水平上还是在成本不菲的情况下。

有关更多信息,请参阅Jones和Lins的“用于动态内存管理的垃圾收集算法”。这是我(第一版)副本中的第7.5章。


一般而言,将

Collection
对象扔掉并重新开始比清除对象再使用更好。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5499705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存