G1垃圾回收器(jdk9默认)

问题

已经有了前面几个垃圾回收器,为什么还要造出G1回收器呢?
  1. 应用程序所对应的业务越来越庞大,复杂,用户越来越多,经常造成STW的GC又跟不上实际需求
  2. 适应不断扩大的内存和不断增加的处理器数量

目标:在延迟可控的情况下获得尽可能高的吞吐量,所以才担当起“全功能收集器”的重任和期望

G1的参数设置

-XX:+UseG1GC		开启G1收集器,jdk9以后默认开启

在这里插入图片描述

G1的特点

与其他GC收集器相比,G1使用了全新的分区算法

并行和并发

  1. 并行性:可让多个GC线程同时工作,有效利用多核计算能力
  2. 并发性:G1拥有和用户线程交互运行的能力

分代收集

  • 它会区分年轻代和老年代,但它不要求整个Eden,Servivor,老年代都是连续的(网格状老年代)
  • 它是将将堆空间分为若干个区域,这些区域包含了逻辑上的年轻代和老年代

空间整合

  • 内存划分为一个一个Region,Region之间是复制算法,整体上是标记压缩,两个算法都可以避免内存碎片

可预测的停顿时间模型

G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不能超过N毫秒

  • G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获得的的空间大小和回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先收集价值最大的Region,保证了G1收集器在有限的时间内可以获取尽可能高的收集效率

G1回收器的缺点

  • 相比于CMS,G1还不具备压倒性的优势,比如在用户程序运行过程中,G1无论是为了垃圾收集产生的内存占用还是垃圾收集运行时的额外负载都比CMS要高

总结来说就是:

   G1在大内存机器上优于CMS,但CMS在小内存机器上有优势,一般临界点在6-8G内存之间

其他

G1的设置就是简化JVM性能调优,开发人员只需要简单的三步来进行调优:
设置步骤

1.开启G1垃圾收集器
2.设置堆的最大内存
3.设置最大的停顿时间

另外:G1提供了Young GC,Mixed GC,Full GC三种GC方式,没有Old GC

注意点:

  • 在hotspot中,除了G1之外的其他垃圾收集器都是使用JVM内置的线程进行GC,而G1可以使用应用线程(操作系统里面的线程)承担GC的工作

分区Region : 划整为0(使用指针碰撞)

所有的Region大小相同,且在JVM生命周期内不会被改变

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值