JVM垃圾回收器
jdk8默认垃圾回收器
在jdk1.8中,垃圾回收器新生代默认使用的是:parallel scanvenge,标记-复制法。
老年代使用的是:parallel old.标记-整理法。
垃圾回收器对比
Serial
串行
复制算法
新生代
降低GC停顿时间
只有1个工作线程
Serial Old
串行
标记-整理算法
老年代
降低GC停顿时间
只有1个工作线程
ParNew
并行
复制算法
新生代
降低GC停顿时间
只是简单的将Serial多线程化
Parallel Scavenge
并行
复制算法
新生代
高吞吐量
和ParNew相似,增加了动态调节新生代和老年代比例。
Parallel Old
并行
标记-整理算法
老年代
高吞吐量
Parallel Scavenge的老年代版本
CMS
并发
标记-清除算法
老年代
降低GC停顿时间
会有内存碎片
G1
并发
分区算法
新生代+老年代
高吞吐量
高并发,低延迟。消耗的CPU和内存高
名次解释:
并行是多个CPU处理多个任务,物理上的同时发生。并发是1个CPU处理多个任务,逻辑上的同时发生。
低延迟:从发出请求到收到响应全部耗时。
吞吐量:在一定的并发下,每秒可以处理的请求数。
参数配置
XX:+UseSerialGC
使用Serial和Serial Old
-XX:+UseParNewGC
使用ParNew和Serial Old
-XX:+UseParallelGC
jdk1.9之前默认值。使用Parallel Scavenge和Serial Old
-XX:+UseParallelOldGC
使用Parallel Scavenge和Parallel Old
-XX:+UseConcMarkSweepGC
使用ParNew,CMS和Serial Old
-XX:+UseG1GC
jdk1.9之后默认值。G1
CMSGC
使用的是标记-清除法.

阶段:
初始标记:stop the word.
并发标记
重新标记:stop the word.
并发清除
优点:并发收集,低延迟.
缺点:
在并发标记和并发清除的期间,无法清除此刻产生的垃圾,从而产生”浮动垃圾”.
基于标记-清除方法实现的,会产生空间碎片化.可设置在进行full gc后,执行标记-清理.不过也会影响效率.
stop the word 横跨时间长.
G one
G1 取代了parallel scanvenge 和parallel old的默认组合.G1摆脱了单纯的回收新生代(minor Gc),老年代(major gc),新生代+老年代(full gc)的思想.将可回收的区域扩展到了整个堆.根据经验值计算出回收哪块内存的性价比高,就回收哪块.(Minxed Gc).
在G1中,将堆划分为了大小相等的region.每个region可以按照需要扮演新生代或者老年代.
同时为了存储大对象,设计出Humongous区域.在进行回收的时候,将其看为老年代.

阶段:
初始标记:通常是伴随着minor gc执行,没有单独分配时间.
并发标记
最终标记:stop the word
筛选回收:stop the word
CMS和G1适用场景:
目前在小内存的应用上,CMS的表现大概率仍会优于G1,而在大内存应用上,G1则大多能发挥其优势,这个优劣势的堆容量平衡点在6-8G之间.
ZGC
更低延迟的垃圾回收器.
Last updated
Was this helpful?