在将对象重新放置到旧世代空间之前,可以在幸存者空间之间复制该对象7次,据我了解,这样做是为了使该对象在放入旧世代空间之前有机会被垃圾回收。我正在听的演讲指出,这样做是为了避免将对象从年轻一代空间提升到老一代空间。
我的问题是为什么升级到老一代不好?讲座没有解释这一点。
最佳答案
为什么老一辈不好?
我正在听的演讲指出,这样做是为了避免将对象从年轻一代空间提升到老一代空间。
一般而言,晋升到老一代并不是坏事。只有寿命短的物体被意外提升时,这才是不好的。
您希望在老一代中使用长寿的对象,以便它们不会干扰次要集合。
分配速率与对象生存期大致成反比(这会导致weak generational hypothesis)。这意味着寿命短的对象会以较高的速率生成。
这又意味着:如果短暂存在的对象被提升为旧一代,那么旧一代将以很高的速度被填充。
次要GC通常比主要GC便宜,尤其是在暂停时间方面,这就是为什么您希望较少运行后者的原因。
使用CMS和G1,您必须进一步区分。他们试图以部分并发的方式收集旧一代产品(在G1的情况下是一小部分),但是如果遇到某些失败案例或跟不上晋升率,他们会退回到完整的世界末日GC。
从根本上说,过快地促进了太多短命的对象,这违反了构建GC的弱代代假设。