垃圾回收器

1、CMS垃圾收集器:old区的垃圾回收器

        一般搭配使用的是:年轻代:ParNew,老年代:CMS

2、CMS特点:采用标记删除算法

        a、初次标记:标记和GC Root直接引用的对象。STW

        b、并发标记:标记老年代所有对象,根据可达性。会产生一个问题就是,并发标记没有STW,可能存在遗漏现象,比如一个线程标记了可用,另一个标记了不可用。那么就需要修正。

        c、重新标记:修正并发标记产生的错误。STW

        d、并发清理:采用标记清理算法。无STW

标记清理算法,会产生内存碎片,但省略了对象内存的移动成本,如果需要存储一个比较大的对象,发现内存中没有连续的内存,那么可能会触发一次GC。

 3、G1垃圾收集器: 

        1.8的内存结构是连续,比如,新生代、老年代。连续。1.8之后使用G1垃圾回收时,堆内存不是连续的,而是一个个网格状,网格中标记了伊甸园区E,幸存区S,老年代O和未使用的空间。可能都不是连续的。 

        每一个块称之为一个region,一个region的大小是1-32m中的2的次幂,总region的大小大概是2000个。堆内存中存储对象的Region有一个自动调整策略,当一个对象的大小>0.5Region,<1Region,那么就直接存储在old区,在Region中标记为H,也就是超大对象。如果对象>1Region,那么就会申请多个H区,来存储这个对象。

        Rset:再每一个Region中都存在一个Rset的地址引用,记录了其他Region引用当前Region。

        Cset:本次GC需清理的Region集合。

4、G1垃圾回收器:覆盖再整个堆区:每次GC全堆进行 MixGC 

        年轻代:G1中对年轻代的收集:回收E区和Sf区,St区是没有标识的,也就是空的,根据复制算法将存活的对象复制到空闲的区域标识为St区。

        老年代:回收

                a、初次标记:标记所有GCRoot直接引用的对象,且还标记这些对象的Region,称之为Region Root。STW

                b、然后扫描全Old区,看每一个Region中的Rset中是否包含Root Region。如果存在就标识。不存在的都是要被清理的。

                c、并发标记:标记存在Root Region的引用对象,缩小了标记的范围。

                d、重新标记:修正并发标记,采用的SATB算法,效率被CMS中的修正算法块。STW

                e、清理:采用复制清理的算法,避免了产生内存碎片,选择垃圾较多的Region进行清除。清除不彻底,但是速度快。STW

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值