介绍一下G1垃圾收集器

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

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

G1收集器Region的类型

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

新生代,老年代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)。
  • 应用在运行过程中产生大量的碎片,需要经常压缩。
  • 想要更可控,可预期的停顿时间;防止高并发下应用雪崩现象。

总结G1垃圾收集器面试题相关推荐

  1. 详解cms和g1垃圾收集器

    G1 垃圾收集器架构和如何做到可预测的停顿(阿里) CMS垃圾回收机制 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿 ...

  2. 转:深入理解Java G1垃圾收集器

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  3. 深入理解 Java G1 垃圾收集器--转

    原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...

  4. 深入理解 Java G1 垃圾收集器

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  5. G1 垃圾收集器原理详解

    一.G1 垃圾收集器的开发背景: 1.CMS 垃圾收集器的缺陷: JVM 团队设计出 G1 收集器的目的就是取代 CMS 收集器,因为 CMS 收集器在很多场景下存在诸多问题,缺陷暴露无遗,具体如下: ...

  6. GC之G1垃圾收集器

    GC之G1垃圾收集器 目录 以前收集器的特点 G1是什么 G1特点 G1底层原理 G1回收步骤 和CMS相比的优势 小总结 1. 以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集必 ...

  7. JVM性能调优实践:G1 垃圾收集器介绍篇

    前言 前面两篇主要整理了性能测试的主要观察指标信息:性能测试篇,以及JVM性能调优的工具:JVM篇.这一篇先简单总结一下GC的种类,然后侧重总结下G1(Garbage-First)垃圾收集器的分代,结 ...

  8. 深入理解 Java G1 垃圾收集器GC调优

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  9. G1垃圾收集器设计目标与改良手段【纯理论】

    在之前已经详细对CMS垃圾回收器进行了学习,今天准备要学习另一个全新的垃圾收集器---G1(Garbage First Collector 垃圾优先的收集器),说是一种全新的,其实G1垃圾收集器已经出 ...

最新文章

  1. Yii实现Password Repeat Validate Rule
  2. ArcGIS Engine生成等值线(C#)
  3. golang中的读写锁
  4. swift变量和函数
  5. 完成这些事情后再做决定 、
  6. 什么是python基础教程-python基础教程之python是什么?概念解析
  7. fiddler 的AutoRespoder的使用(手动添加测试桩)
  8. CodeMirror自动提醒配置
  9. C++ 动态连接库使用
  10. steam计算机共享授权,steam共享游戏账号怎么授权
  11. 用.iso文件从硬盘安装redhatlinux7.3(转)
  12. python 实现文字识别提取
  13. 超简单一行代码实现应用双开,仿照微信双开、QQ双开等实现app应用双开,即采用Android插件化开发在免安装情况下加载使用原生app
  14. zabbix 使用教程
  15. WebGoat8 M17 Password Reset 密码重置 答案、思路、题解
  16. Json数据的对比工具,对比库(含js在线对比工具,.net 的jsondiffer包)
  17. python爬取芒果TV《乘风破浪的姐姐》弹幕数据(已完成)
  18. python中\r的意义及用法
  19. oppor15android10怎么降级,OPPO R15系统降级教程_OPPO R15怎么回退到原来旧版本系统
  20. C++四种cast的详细介绍

热门文章

  1. flask get和post
  2. Vue 单页面应用 把公共组件放在 app.vue 但是我希望某个页面没有这些公共组件怎么办???(比如登陆页面)
  3. 蓝桥杯 ADV-235 算法提高 阶乘差
  4. Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明
  5. 解决gridview导出到excel中汉字出现乱码的问题
  6. Cpp module
  7. 程序员摆脱疲劳的 11 个建议
  8. 文件的上传下载功能的实现(包括进度条)[telerik控件]
  9. 公交查询www.chajt.com
  10. Linux下安装amsn