G1

98 阅读1分钟

一、G1较之CMS做了哪些改进?

  1. 进行逻辑上的分类,将堆划分为一个个region,region的分类有新生代、老年代、空闲、大对象
  2. 当大对象没有任何引用的时候直接清除,而非进入老年代

二、G1是如何收集垃圾的?

  1. minorGC:根扫描、更新&&处理RSet(每个region都有RSet,存储对象之间引用,对于年轻代的region只存储来自老年代的引用,因为年轻代都要做minorGC)、复制对象(CSet为存活下来的对象,存储到空的Survivor区或老年代的region中)
  2. mixedGC:初始标记、并发标记、重新标记(采用STAB算法,为存活的对象做一次快照,只记录并发阶段时产生的引用变化,该阶段只扫描发生过变化的对象,而非扫描所有的线程栈和整个年轻代)、清除
  3. fullGC:mixedGC无法跟上用户线程分配内存的速度