为什么主要垃圾收集比次要慢?

M S*_*ach 6 java garbage-collection

通过此链接已经消失但仍然混淆了小型和主要GC集合中实际发生的情况.

假设我有年轻一代的100个对象,其中85个对象是无法访问的对象.现在,当Minor GC运行时,它将回收85个对象的内存并将15个对象移动到较旧的(终身)代.

现在有15个活动对象存在于老一代中,其中3个无法访问.说主要GC发生.它将保留15个对象,并回收3个无法访问的对象的内存.据说主要GC比次要GC慢.My question is why ? Is it because of major GC happens on generally greater number of objects than minor as minor gc occurs more frequently than major?

根据理解major GC should be faster as it needs to do less work即从无法到达的对象中回收内存而不是次要GC,因为年轻一代的死亡率很高.

Evg*_*eev 5

1)次要GC将首先将15个物体移动到一个幸存者空间,例如SS1,下一个GC将把那些仍然活着的人移动到SS2,下一个GC将把幸存的人移回SS1,依此类推.只有那些幸存下来的几个(例如8个)重新安置(小型GCs)的人才能最终进入老一代.

2)仅当JVM无法在旧代中分配对象时才会发生主要GC,因为其中没有可用空间.为了清除死机中的内存,GC遍历旧一代的所有对象,因为旧一代比新一代大几倍,它可能容纳数倍的对象,因此GC处理需要几倍的时间