G1垃圾回收器(jdk9默认)

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。G1垃圾回收器(jdk9默认),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

问题

已经有了前面几个垃圾回收器,为什么还要造出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生命周期内不会被改变

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202542.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!