栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM——》G1垃圾收集器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM——》G1垃圾收集器

一、概念

官网链接
发展过程:
1.7出现
1.8推荐使用
1.9默认使用

1、特点

1、分代收集(仍然保留分代的概念)
2、空间整合(整体上属于“标记-整理”算法,不会导致空间碎片)
3、可预测的停顿(比CMS更先进的地方在于能让使用者明确指定一个长度为M毫秒的时间片段内,消
耗在垃圾收集上的时间不得超过N毫秒)
4、所谓Garbage-Frist,其实就是优先回收垃圾最多的Region区域

2、Region

将整个Java堆划分为多个 大小相等的独立区域(Region)

个数:2048
大小:固定一样,数值范围在1M~32M(必须是2的n次幂)
分代:Region集合(新生代和老年代不再是物理隔离)

设置大小:-XX:G1HeapRegionSize=M

如果对象太大,一个Region放不下[超过Region大小的50%],那么就会直接放到H中

二、算法

标记-整理

三、过程(步骤)

1、初始标记(Initial Marking)

标记以下GC Roots能够关联的对象,并且修改TAMS的值,需要暂 停用户线程

2、并发标记(Concurrent Marking)

从GC Roots进行可达性分析,找出存活的对象,与用户线程并发执行

3、最终标记(Final Marking)

修正在并发标记阶段因为用户程序的并发执行导致变动的数据,需暂停用户线程

4、筛选回收(Live Data Counting and Evacuation)

对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间制定回收计划

四、优缺 优点:

1、可以降低停顿时间,通过设置让停顿时间更短
2、可以变相的解决空间碎片

五、注意 1、堆内存要多大才能启动G1?

答案:2G以上
原因:region共2048个,每个region大小1M~32M,所以最小2048M = 2G

2、如何选择合适的垃圾收集器?

答案:官网链接

除非您的应用程序有相当严格的暂停时间要求,否则首先运行应用程序并允许VM选择收集器
如有必要,调整堆大小以提高性能。
如果性能仍然达不到您的目标,请使用以下准则作为选择收集器的起点。

场景1:内存小于100M

使用-XX:+UseSerialGC选择串行采集器

场景2:应用程序在单处理器上运行,并且没有停顿时间要求

1)让VM选择采集器
2)使用-XX:+UseSerialGC选择串行采集器

场景3:如果(a)峰值应用程序性能是第一优先级,并且(b)没有暂停时间要求,或者可以接受1秒或更长的暂停

1)让VM选择收集器
2)使用-XX:+UseParallelGC选择并行收集器。

场景4:如果响应时间比总吞吐量更重要,并且垃圾收集暂停必须保持在大约1秒以下

选择具有-XX:+useConMarkSweepGC或-XX:+UseG1GC的并发收集器。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821613.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号