来自Oracle docs:
旧世代用于存储长期幸存的物体。
通常,为年轻代对象设置阈值,当满足该年龄时,对象将移动到旧代。
最终需要收集老一代。此事件称为主要垃圾回收。
主要集合通常要慢得多,因为它涉及所有活动对象。 因此,对于响应式应用程序,应尽量减少主要垃圾收集。
顾名思义就是垃圾收集,垃圾这里指的是未引用的对象(不再需要的对象)。
对于这一行:'主要集合通常要慢得多,因为它涉及所有活动对象。'
实时对象是那些仍然存在的对象。那么,为什么一个主要的集合包括活动对象? (主要收藏必须只涉及死亡物品)。
答案 0 :(得分:3)
与真实垃圾收集不同,Java GC主要处理活动对象。这更像是扔垃圾填埋场并拾取所需的一切。
原因是没有直接的方法来识别垃圾。所有已知的是找到对象的生命引用意味着它不是垃圾。
何时会触及垃圾
实际上从来没有:一个全面的收藏家就是这样:
剩下的是免费记忆。垃圾只是呆在那里而没人关心。
这是次要收藏效率的关键。大多数物体都很年轻,只触碰幸存者,头顶很小。
除了具有finalize
或参考队列的对象之外,永远不会触及死对象。除非你真的知道自己在做什么,否则不要使用finalize
。你永远不能依赖它。