总结G1垃圾收集器面试题
介绍一下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
根分区扫描
扫描整个老年代
Region
的Rset
,标记包含初始标记
阶段的Root Region
的Region
并发标记
遍历
根分区扫描
步骤标记好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垃圾收集器面试题相关推荐
- 详解cms和g1垃圾收集器
G1 垃圾收集器架构和如何做到可预测的停顿(阿里) CMS垃圾回收机制 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿 ...
- 转:深入理解Java G1垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- 深入理解 Java G1 垃圾收集器--转
原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...
- 深入理解 Java G1 垃圾收集器
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- G1 垃圾收集器原理详解
一.G1 垃圾收集器的开发背景: 1.CMS 垃圾收集器的缺陷: JVM 团队设计出 G1 收集器的目的就是取代 CMS 收集器,因为 CMS 收集器在很多场景下存在诸多问题,缺陷暴露无遗,具体如下: ...
- GC之G1垃圾收集器
GC之G1垃圾收集器 目录 以前收集器的特点 G1是什么 G1特点 G1底层原理 G1回收步骤 和CMS相比的优势 小总结 1. 以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集必 ...
- JVM性能调优实践:G1 垃圾收集器介绍篇
前言 前面两篇主要整理了性能测试的主要观察指标信息:性能测试篇,以及JVM性能调优的工具:JVM篇.这一篇先简单总结一下GC的种类,然后侧重总结下G1(Garbage-First)垃圾收集器的分代,结 ...
- 深入理解 Java G1 垃圾收集器GC调优
本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...
- G1垃圾收集器设计目标与改良手段【纯理论】
在之前已经详细对CMS垃圾回收器进行了学习,今天准备要学习另一个全新的垃圾收集器---G1(Garbage First Collector 垃圾优先的收集器),说是一种全新的,其实G1垃圾收集器已经出 ...
最新文章
- Yii实现Password Repeat Validate Rule
- ArcGIS Engine生成等值线(C#)
- golang中的读写锁
- swift变量和函数
- 完成这些事情后再做决定 、
- 什么是python基础教程-python基础教程之python是什么?概念解析
- fiddler 的AutoRespoder的使用(手动添加测试桩)
- CodeMirror自动提醒配置
- C++ 动态连接库使用
- steam计算机共享授权,steam共享游戏账号怎么授权
- 用.iso文件从硬盘安装redhatlinux7.3(转)
- python 实现文字识别提取
- 超简单一行代码实现应用双开,仿照微信双开、QQ双开等实现app应用双开,即采用Android插件化开发在免安装情况下加载使用原生app
- zabbix 使用教程
- WebGoat8 M17 Password Reset 密码重置 答案、思路、题解
- Json数据的对比工具,对比库(含js在线对比工具,.net 的jsondiffer包)
- python爬取芒果TV《乘风破浪的姐姐》弹幕数据(已完成)
- python中\r的意义及用法
- oppor15android10怎么降级,OPPO R15系统降级教程_OPPO R15怎么回退到原来旧版本系统
- C++四种cast的详细介绍
热门文章
- flask get和post
- Vue 单页面应用 把公共组件放在 app.vue 但是我希望某个页面没有这些公共组件怎么办???(比如登陆页面)
- 蓝桥杯 ADV-235 算法提高 阶乘差
- Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明
- 解决gridview导出到excel中汉字出现乱码的问题
- Cpp module
- 程序员摆脱疲劳的 11 个建议
- 文件的上传下载功能的实现(包括进度条)[telerik控件]
- 公交查询www.chajt.com
- Linux下安装amsn