在Java的老一代部分的垃圾收集

时间:2014-09-13 19:12:32

标签: java garbage-collection

来自Oracle docs:

  

旧世代用于存储长期幸存的物体。

     

通常,为年轻代对象设置阈值,当满足该年龄时,对象将移动到旧代。

     

最终需要收集老一代。此事件称为主要垃圾回收。

     

主要集合通常要慢得多,因为它涉及所有活动对象。   因此,对于响应式应用程序,应尽量减少主要垃圾收集。

顾名思义就是垃圾收集,垃圾这里指的是未引用的对象(不再需要的对象)。

对于这一行:'主要集合通常要慢得多,因为它涉及所有活动对象。'

实时对象是那些仍然存在的对象。那么,为什么一个主要的集合包括活动对象? (主要收藏必须只涉及死亡物品)。

1 个答案:

答案 0 :(得分:3)

与真实垃圾收集不同,Java GC主要处理活动对象。这更像是扔垃圾填埋场并拾取所需的一切。

原因是没有直接的方法来识别垃圾。所有已知的是找到对象的生命引用意味着它不是垃圾。

  

何时会触及垃圾

实际上从来没有:一个全面的收藏家就是这样:

  • 找到所有生命对象
  • 将他们移到其他地方
  • 更新对它们的所有引用

剩下的是免费记忆。垃圾只是呆在那里而没人关心。

这是次要收藏效率的关键。大多数物体都很年轻,只触碰幸存者,头顶很小。

除了具有finalize或参考队列的对象之外,永远不会触及死对象。除非你真的知道自己在做什么,否则不要使用finalize。你永远不能依赖它。