主要垃圾回收器和垃圾回收算法

垃圾回收算法:

  • 标记清除算法 mark-sweep 分为标记和清除两个阶段,但是内存碎片化严重

  • 复制算法 copying 为了解决内存碎片化问题,但是空间利用率降低,主要用于大量对象存活时间短的年轻代垃圾回收

  • 标记压缩算法 mark-compact compact紧凑使压实的意思,即标记后不是清除而是将仍存活的对象移向内存的一端,清理掉端界外的垃圾对象,主要用于老年代的垃圾回收

  • 分代收集算法:是现在大多JVM采用的方法,即根据对象生存周期的不同把堆分为年轻代和年老代,采用不同的垃圾回收算法

  • 分区收集算法:G1引入的回收算法,基于标记压缩算法,不会产生内存碎片。且避免全区域垃圾收集,它将整个堆空间划分为几个独立的小区间,每个小区间独立使用,独立回收,在后台维护一个优先级列表,每次可以根据允许的垃圾收集时间,优先收集垃圾最多的区域,而不是回收整个堆,精确控制GC停顿时间。

    扫描堆中哪些对象是垃圾耗时比较长,所以诞生了并发标记,即三色标记,使用黑白灰,一轮轮去扫描,但是并发标记很容易造成错标和漏标(浮动垃圾),怎么解决错标的问题?
    CMS采用增量更新的方法把黑的标成灰的,但是并发时多线程可能又给变成黑色。
    G1采用SATB,把还没扫描到的对象,做一个快照,把引用引到堆栈,rememberSet中,保证了能再次扫描到这个垃圾region
    但是G1也有问题,STW也比较长,几百毫秒

  • 颜色指针算法:ZGC采用的算法,利用指针来记录对象的状态,这样对象的销毁只需要改变指针内容即可,大大缩短了扫描时间,无论内存大小GC停顿都可以稳定在只有10毫秒左右,停顿时间和内存增长没有关系!!所以ZGC支持2的42次方=4T,最大16T级别的内存

    不分代,但是将来可能分冷热对象
    读屏障
    颜色指针.全新的算法,和三色标记完全不同.原来的GC信息记录在对象头,而ZGC记录在对象的指针上,不用记录在对象上了.所以指针记录对象无用后,这个对象所处的内存就可以立即使用了!
    在64位指针里分出4位来记录对象的状态m0 ,m1,remapped, finalizable
    内存回收完可以立即使用
    NUMA aware。之前CPU多了后,会再访问内存时产生竞争,浪费时间。所以NUMA引入,为每个CPU优先分配近的内存

常见垃圾收集器

在这里插入图片描述

CMS垃圾回收器以最短回收停顿时间为目的。CMS 是 Concurrent Mark Sweep 的缩写,意为并发标记清除,使用的是标记-清除算法,同时它又是一个使用多线程并发回收的垃圾收集器。一般比较注重服务端性能的时候使用它,它的回收过程可以分成四个步骤:1. 初始标记、2. 并发标记、3. 重新标记、4. 并发清除。
初始标记和重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC Roots 能直接关联到的对象,速度很快,并发标记阶段就是进行GC RootsTracing的过程,而重新标记阶段就是为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍微长一些,但远比并发标记的时间短。由于整个过程中耗时最长的并发标记和并发清除过程,所以从总体上说,CMS收集器的内存回收过程是与用户线程一起并发执行的。

UseParallelGC:可以有效的利用多CPU,最大化的提高程序吞吐量,但它不能与CMS收集器配合工作。
UseParNewGC :ParNew收集器是Serial收集器的多线程版本,在收集过程中,会stop-the-world。但它却是许多运行在Server模式下的虚拟机中首选的新生代收集器,很重要的原因是目前只有它能与CMS收集器配合工作。

常用的三个组合如下:

JVM参数YoungOld
JDK1.8默认的Parallel scavengeParallel Old
-XX:+UseParNewGC -XX:+UseConcMarkSweepGCParNewGCCMS
-XX:UseG1GCG1

UseParNewGC 或者G1是需要手动开启的,目前常用的就是下面两种

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值