专栏首页JVMGC总结G1垃圾收集器面试题
原创

总结G1垃圾收集器面试题

介绍一下G1垃圾收集器

G1收集器伴随JAVA9于2017-9-21发布,G1收集器兼顾低延迟高吞吐在服务端运行,HotSpot团队期望取代CMS收集器。也就是在满足停顿时间的情况下获取最大的吞度量。有两种收集模式Young GC和Mixed GC。G1收集器将堆内存划分成大小相等的Region,新生代,老年代也就成了逻辑概念。整体上采用的是标记-整理算法,局部采用了复制算法

G1是jdk1.9的默认垃圾收集器,-XX:+UseG1GC开启

G1收集器Region的类型

  • 新生代
  • 老年代
  • 未使用
  • 大对象区
image-20201209113013702

新生代,老年代Region不再是一块连续的空间。当然存放大对象的Region必须要连续。

G1收集器中大对象怎么分配

  • 对象的大小<0.5个RegionSize直接存在新生代Eden Region
  • 对象的大小>=0.5个RegionSize且对象的大小<1个RegionSize,存到大对象区Humongous Region
  • 对象的大小>=1个RegionSize存到连续的大对象区Humongous Region

怎么指定Region的大小

使用-XX:G1HeapRegionSize来指定Region的大小,Region的大小必须是2的幂次方,最大32M。

G1垃圾收集器的运行过程?

初始标记(stop the world)

比较GC Roots直接引用的对象同时标记,同时标记GC Roots对象所在的Region称为Root Region

根分区扫描

扫描整个老年代RegionRset,标记包含初始标记阶段的Root RegionRegion

并发标记

遍历根分区扫描步骤标记好Region,标记所有可达对象,和应用线程并发执行

重新标记(stop the world)

由于并发标记是和应用线程并发执行的,所以不可避免的有些对象会发生变化,G1 GC清空 SATB缓冲区,跟踪未被访问的存活对象,并执行引用处理。

选择清除(stop the world)

评估每个Region的垃圾量,选取回收效果最好的若干Region收集(取决于-XX:MaxGCPauseMillis设置值,默认是200ms)。在规定停顿时间内,获取最大的吞吐量。

什么是Rset

每个Region初始化时,都会初始化一个Rset(remembered set),每个Region都包含一个Rset,Rset的作用是记录了哪些内存区域(Region)堆当前Region的引用。Rset是一个空间换时间的数据结构。有了Rset可以避免对整个堆进行扫描。

G1和CMS的区别

  • G1采用标记-整理算法,CMS采用标记-清除算法,所以G1不会产生很多垃圾碎片.
  • G1的STW(stop the world)可控,可以使用-XX:MaxGCPauseMillis设置默认200ms
  • G1的Young GC模式可以工作在年轻代,而单独的CMS只能工作在老年代.

G1的应用场景

  • 服务端多核CPU,JVM占用较大的应用(至少大于4G)。
  • 应用在运行过程中产生大量的碎片,需要经常压缩。
  • 想要更可控,可预期的停顿时间;防止高并发下应用雪崩现象。
wx.jpg

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • G1垃圾收集器

    G1 GC,全称Garbage-First Garbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,...

    黑洞代码
  • G1垃圾收集器

    youngGC时,GC Root主要是两类,栈空间和老年代到新生代区分的引用(2,3)关系。

    入门小站
  • Garbage First(G1)垃圾收集器

    G1垃圾收集器采用一个略微不同的手段来解决并行、串行以及CMS GC的众多缺陷。G1将堆拆成一系列的分区,这样在一个时间段内,大部分的垃圾收集操作就只是在一个分...

    博文视点Broadview
  • G1垃圾收集器概述

    开始学习前,抛出两个常见面试问题:1.G1的回收原理是什么?为什么G1比传统的GC回收性能好?2.为什么G1如此完美仍然会有ZGC?简单的回顾下CMS垃圾回收机...

    黑洞代码
  • 面霸篇:G1 垃圾收集器原理!

    所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(Garbage First)回收器的出现颠覆了之前版本CMS、Parallel等垃圾回收器的分代收集...

    码哥字节
  • 【译】深入理解G1的GC日志(一)

    这篇文章将深入研究G1的日志和调优参数。为了在实际工作中对G1进行调优,作为开发者的你需要理解G1垃圾收集器的每个步骤,以及每个步骤在整个垃圾收集周期中的作用。...

    阿杜
  • G1垃圾收集器详解(1)

    Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java 8/9,...

    黑洞代码
  • G1垃圾收集器详解(2)

    G1对内存的使用以分区(Region)为单位,而对对象的分配则以卡片(Card)为单位。

    黑洞代码
  • JVM垃圾收集器总结

    1、是一个单线程的收集器,“Stop The World” 2、对于运行在Client模式下的虚拟机来说是一个很好的选择 4、简单而高效

    神秘的寇先森
  • 关于生产环境改用G1垃圾收集器的思考

    由于我们的业务量非常大,响应延迟要求高。目前沿用的老的ParNew+CMS已经不能支撑业务的需求。平均一台机器在1个月内有1次秒级别的stop the ...

    静儿
  • 垃圾回收器分类

    有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection,对应的产品我们称为Garbage Collector。

    编程之心
  • Java 14 Hotspot 虚拟机垃圾回收调优指南!

    出处:www.cnblogs.com/sxpujs/p/12638114.html

    Java技术栈
  • 深入理解JVM - G1收集器

    上一篇通过案例说明了老年代的常见优化和处理方式,这一节来看下目前最为热门的G1收集器,G1收集器也是JDK9服务端默认的垃圾收集器,虽然JDK9在现在看来还不...

    阿东
  • 深入理解JVM - 阶段总结与回顾(一)

    开设这个专栏的目的毫无疑问是给个人的成长做一个记录和归档,因为这段时间下来发现学东西一定要系统并且有目的循序渐进的学才有更快的成长,JVM的内容和细节是学不完...

    阿东
  • 性能优化-垃圾收集器以及内存分配

    前面我们讲了垃圾回收的算法,还需要有具体的实现,在jvm中,实现了多种垃圾收集 器,包括:串行垃圾收集器、并行垃圾收集器、CMS(并发)垃圾收集器、G1垃圾收集...

    cwl_java
  • 深入理解G1垃圾收集器

    Java语言一直使用GC技术进行JVM自动内存管理,避免手动管理带来的一系列问题,以提升开发人员效率。衡量垃圾回收的三个最重要指标:

    肉眼品世界
  • GC 的算法及收集器

    使用 GC 技术来进行内存自动管理,避免了手动管理带来的悬挂指针(Dangling Pointer)问题,很大程度上提升了开发效率,从此 GC 技术也一举成名。...

    Java架构师必看
  • Java HotSpot G1垃圾优先型垃圾回收器调优

    天策
  • 一张图看懂JVM之垃圾回收器详解

    感谢读者的反馈,在?图中更新了新生代Eden区以及两个Survivor区的默认空间占比的分配表示,这里按照10等份区分8/10、1/10、1/10分别表示8:1...

    用户5927304

扫码关注云+社区

领取腾讯云代金券