Java 新型垃圾回收器(Garbage First,G1)
HotSpot 垃圾收集器实现
Serial Collector(串型收集器)
适用收集场景:1. 新生代收集(Young Generation Collection)2. 老年代收集(Old Generation Collection)
Parallel Conllector(并行收集器)
又叫吞吐量收集器(throughput collector)应用于多核系统。
适用收集场景:1. 新生代收集是并行处理。2. 老年代收集和 Serial Collector 一样。
Parallel Compacting Collector(并行压缩收集器)
The parallel compacting collector was introduced in J2SE 5.0 update 6. The difference between it and the parallel collector is that it uses a new algorithm for old generation garbage collection
.
Note: Eventually, the parallel compacting collector will replace the parallel collector.
上述文字中 斜体 文字告诉我们,这个收集器和上一个并行收集器唯一的不同是在老年代使用了新的算法。
适用收集场景:1. 新生代收集(Young Generation Collector) 和Parallel Collector 相同;2. 老年代收集(Old Generation Collector)
Concurrent Mark-Sweep (CMS) Collector (并发标记清除)
Young generation collections 通常不会造成长时间停顿,然而old generation collections却是是造成长时间停顿的,虽然它不长出现,特别是在大的heaps回收被涉及到的时候。为了处理这个问题,HotSpot JVM 引入了一个叫做 concurrent mark-sweep(CMS) collector ,通常也被称为 低延时收集器low-latency collector
.
适用场景: 仅适用于老年代,新生代处理方式和Parallel Collector相同。
G1目标
G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector.
计划将G1作为CMS收集器的长久替代物。
它是为了平衡 延时和吞吐量之间的一种最优关系。
G1实现原理
基本属性
和CMS的相同点
CMS Replacement(CMS替代物)
Server 'Style' Garbage Collector(服务端垃圾收集器-内存,核数区别)
Parallel 并行
Concurrent 并发
Generational 分代
和CMS的主要区别
Good Throughput 良好的吞吐量
Compacting 压缩
Improved ease-of-use 提升了易用性(更多的JVM参数可用)
Predictable(though not hard real-time) 可预估的,非绝对实时。
基本概念
G1 堆布局
G1将堆分成若干固定大小的Region/区域(区域大小只有1、2、4、8、16和32M),G1的新生代和老年代都是一个无需连续的区域集合,每一个区域独立进行内存的分配和回收,区域是内存管理的基本单元,在某一个时间节点,可能是空闲的,当内存被请求时,内存管理器将空闲的Region分配到某个分代,然后归还应用分配给的空间。
大多数情况下,GC的操作同一时间只会在一个区域进行。
Region 分布
超大对象(Humongous Objects)
下图中跨区域的灰色模块即代表了超大对象,超大对象是指那些空间大小 >=1/2 个区域空间的对象.超大对象有时候会被以下特殊方式处理:
每个超大对象在老年代区域中的连续区域分配。对象分配起始于在连续区域中的首个成员,如果连续区域中的最后一个区域存在剩余空间的话,那么该空间将失去分配的机会,直到其关联的超大对象被完全回收
超大对象的回收通常仅在Cleanup停顿中的Marking结束后、或者在Full GC时。
超大对象的分配可能造成垃圾收集停顿过早地发生(主要是因为空间浪费。)
超大对象绝不会发生移动,即使在没有Full GC的情况下
回收周期
Young-only
Young-only 阶段的垃圾 收集 时逐渐地将老年代的对象填充到当前可用的内存。即将可以提升的新生代对象提升到老年代。
该阶段开始于Young-only的 收集 动作,也就是下图中的蓝色小球,每一个小球都是一次收集动作,也就是提升对象到老年代。Young-only 与Space-reclamation 过渡实际上是开始于 老年代空间 占用 达到某个阈值,即Heap初始化占用阈值。此时,G1将调度Initial Mark的Young-only收集(蓝色大球),而非常规的Young-only(蓝色小球)收集。
Initial Mark
此类收集开始于标记过程,附带一个常规的Young-only收集,并发标记决定所有在老年代区域中可达的存活对象是否要遗留到Space-reclamation 阶段。当标记过程未结束时,常规的Young-only 收集可能已经发生,等到标记完成时,将伴随着两个特殊的 Stop-The-World 停顿, Remark 和 CleanUp .
Remark 停顿
因为在 Initial Mark 标记过程中,因为它是并发执行,有可能会发生 Young-only 收集,造成标记数据有误差,因此需要重新标记一次,该过程为串行执行,会造成 Stop-The-World .
在Remark 和Cleanup之间,G1将并发地计算出一份对象存活性总结报告,它将在Cleanup停顿阶段更新内部的数据结构
Cleanup 停顿
该停顿同样将完整的回收空闲区域,并且决定 Space-reclamation 阶段是否需要继续跟踪,如果继续跟随的话,Young-only阶段的完成仅仅做 Young-only 收集动作。
Space-reclamation
Space-reclamation(空间回收/复用)阶段是回收老年代空间,同时处理新生代。
这个阶段由多个混合的收集动作组成,不仅包含新生代区域,同时也会排除老年代区域的存活对象,当G1发觉依然无法满足空闲的空间请求时,G1会终止本阶段。如果应用消耗完内存,G1将执行 Stop-The-World 的全堆压缩(Full GC)。
如下图所示:
https://i.loli.net/2019/08/05... ; width="400" >
2种过程是循环往复收集。
G1指令细节
初始空间占用
Initiating Heap Occupancy Percent(IHOP): Initial Mark 收集触发的阈值,为老年代空间定义Heap占用的百分比。
JVM 设置参数:-XX:InitiatingHeapOccupancyPercent
默认情况下,根据标记时间以及老年代在标记周期中的内存分配,G1垃圾收集器将自动抉择理想的IHOP的值。
JVM 失效参数:-XX:-G1UseAdaptiveIHOP
修改区域空间大小
-XX:G1HeapRegionSize
G1 Vs. 传统垃圾回收器
G1 不区分新/老生代,只区分Region
G1 收集分2个阶段 Young-only 和 Space-reclamation
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何选择合适的服务器-----(阿里云最新优惠选择)
现在提到申请购买云服务器,用户大多首先考虑的就是上阿里云,毕竟阿里云是目前国内最大的云服务商,但是往往用户在申请阿里云服务器的时候只是在ECS云服务器购买页一步一步的去买,其实对于我们大多数用户来说,申请购买阿里云服务器更应该考虑一下几个优惠活动:火爆特惠详情页面如果我们所需要申请购买的阿里云服务器配置不是很高,那么我们应该考虑下面两个活动:活动一:全民云计算,入门级云服务器3折起(点击直达活动详情页)全民云计算活动是阿里云推出的一个长期优惠活动,活动推出的云服务器配置为突发性能t5实例(10%性能基线)1核1G、1核2G、2核4G,共享型n4实例1核2G、2核4G,计算网络增强型实例2核4G、4核8G,带宽有1M、2M、5M、10M可以选,同时用户如果一次购买三年可以享受跟2年一样的优惠价格。非常适合web应用前端机、轻负载应用、微服务、开发测试、小型 Web 应用、中小型数据等各行业通用计算应用场景。 活动二:Hi拼团优惠活动(点击直达活动详情页)Hi拼团推出的活动云服务器配置均为低配和中配的云服务器配置,而且用户可以选择直接购买享受3折的价格,也可以自己开团然后邀请他人一起购买享...
- 下一篇
微服务SpringCloud之Spring Cloud Config配置中心Git
微服务SpringCloud之Spring Cloud Config配置中心Git 微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务注册与发现是将服务从分散到中心化,而今天的配置中心是将配置文件从分散到中心化,这样便于后续维护。本篇主要以git为例学习使用Spring Cloud Config配置中心。 一、配置中心介绍 在我们了解spring cloud config之前,我可以想想一个配置中心提供的核心功能应该有什么 提供服务端和客户端支持集中管理各环境的配置文件配置文件修改之后,可以快速的生效可以进行版本管理支持大的并发查询支持各种语言Spring Cloud Config可以完美的支持以上所有的需求。 Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7设置SWAP分区,小内存服务器的救世主