JVM之Java GC

   eden区域,2个survivor区域,一般8:1,大部分马上回收。 新生代,老年代。

   清楚标记算法易产生碎片。 复制算法, 标记整理算法,存活对象向一端移动。 分代收集,分新生代,老年代。

新生代一般复制算法,对象先进edgen区域, minor gc将survivor 和 eden区的存活对象移动到另一个survior区后清除。空间不够,进老年代。

    大对象直接进老年代, 默认15随新生代进老年代。 如果新生代某一代对象占50%以上,大于该年龄的也进老年代。老年代满后出发full gc。

  为避免频繁minor gc,导致新生代过快,过快填满老年代,处罚full gc,一般xmn为xms堆内存1/4至1/2。

    垃圾收集器:serial收集器,单线程,暂停进程,简单高效。parNew, serial的多线程版本。 serial old,serial老年代版本, parallel old,老年代版本。  parallel scavenge收集器,新生代收集,配置吞吐量和最大停顿时间作为优化目标。  cms收集器,以最短停顿时间为目标,和用户线程并行执行。缺点:对cpu资源敏感;无法处理浮动垃圾,需预留内存给用户线程,老年代未很满就收集;空间碎片,有大对象会提前触发full gc。  

   g1收集器,基于标记整理算法,控制停顿,将整个java堆划分为大小固定区域,后台维护优先列表,根据允许的收集时间,优先回收垃圾最多的区域。

 

你可能感兴趣的:(JVM之Java GC)