JVM垃圾收集器

2020-11-26  本文已影响0人  孤独的死锁
垃圾收集器

jvm的垃圾收集器分为如下几种类型:
串行:Serial,Serial Old
吞吐量优先: parNew, parallel Scavenge, parallel Old
响应时间优先:CMS,G1

Serial收集器

单线程收集器,在进行垃圾收集时,必须暂停其他所有的工作线程,直至Serial收集器收集结束为止(stop the world)。虚拟机运行在Client模式下的默认的新生代收集器


Serial收集器

ParNew收集器

ParNew收集器就是Serial收集器的多线程版本,它也是一个新生代收集器,目前只有它能和CMS收集器(Concurrent Mark Sweep)配合工作。


Serial收集器(老年代是Serial Old)

Parallel收集器(parallel Scavenge, parallel Old)

iParallel收集器

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,作用于老年代,采用的是标记-清除算法。
CMS收集器工作的整个流程分为以下4个步骤:

G1收集器

G1和其他GC算法最大的区别是弱化分代概念,引入分区思想


cms

G1 GC切分堆内存为多个区间(Region),从而避免很多GC操作在整个Java堆或者整个年轻代进行。有的分区内垃圾对象特别多,有的分区内垃圾对象很少,G1会优先回收垃圾对象特别多的分区,这样可以花费较少的时间来回收这些分区的垃圾,这也就是G1名字的由来,即首先收集垃圾最多的分区。
G1的垃圾收集周期主要有4种类型:年轻代收集周期、多级并发标记周期、混合收集周期和full GC(转移失败的安全保护机制)

年轻代收集(YGC)

应用刚启动,慢慢流量进来,开始生成对象。G1会选一个分区并指定他为eden分区,当这块分区用满了之后,G1会选一个新的分区作为eden分区,这个操作会一直进行下去直到达到eden分区上限,也就是说eden分区已经被占满,那么会触发一次年轻代收集。
年轻代收集首先做的就是迁移存活对象,它使用单eden,双survivor进行复制算法,它将存活的对象从eden分区转移到survivor分区,survivor分区内的某些对象达到了任期阈值之后,会晋升到老年代分区中。原有的年轻代分区会被整个回收掉。

并发标记周期(MIX GC)
上一篇下一篇

猜你喜欢

热点阅读