G1是一个垃圾收集器,设计用于具有大量内存的多处理器机器。由于它提高了性能效率,G1垃圾收集器最终将取代CMS垃圾收集器。

该垃圾收集器设计的主要目标之一是满足用户设置的预期的 JVM 停顿时间。

G1 采用一个高级分析引擎来选择在收集期间要处理的工作量,此选择过程的结果是一组称为 GC 回收(collection set( CSet ))的区域。一旦收集器确定了 GC 回收集 并且 GC 回收、整理工作已经开始,这个过程是without
stopping的,即 G1 收集器必须完成收集集合的所有区域中的所有活动对象之后才能停止;但是如果收集器选择过大的 GC 回收集,此时的STW时间会过长超出目标pause time。

这种情况在mixed collections时候比较明显。这个特性启动了一个机制,当选择了一个比较大的collection set,Java12 中将把 GC 回收集(混合收集集合)拆分为mandatory(必需或强制)及optional两部分( 当完mandatory的部分,如果还有剩余时间则会去处理optional部分)来将mixed collections从without stopping变为abortable,以更好满足指定pause time的目标。

其中必需处理的部分包括 G1 垃圾收集器不能递增处理的 GC 回收集的部分(如:年轻代),同时也可以包含老年代以提高处理效率。

将 GC 回收集拆分为必需和可选部分时,垃圾收集过程优先处理必需部分。同时,需要为可选 GC 回收集部分维护一些其他数据,这会产生轻微的 CPU 开销,但小于 1 %的变化,同时在 G1 回收器处理 GC 回收集期间,本机内存使用率也可能会增加,使用上述情况只适用于包含可选 GC 回收部分的 GC 混合回收集合。

在 G1 垃圾回收器完成收集需要必需回收的部分之后,如果还有时间的话,便开始收集可选的部分。但是粗粒度的处理,可选部分的处理粒度取决于剩余的时间,一次只能处理可选部分的一个子集区域。在完成可选收集部分的集后,G1 垃圾回收器可以根据剩余时间决定是否停止收集。如果在处理完必需处理的部分后,剩余时间不足,总时间花销接近预期时间,G1 垃圾回收器也可以中止可选部分的回收以达到满足预期停顿时间的目标。

最新文章

  1. SQLSERVER系统视图,系统表,sys.sql_modules视图
  2. Django模板系统——过滤器
  3. docker解决数据存储问题的方案
  4. Unity中简单使用Opengl
  5. SpringMVC @RequestBody接收Json对象字符串 demo
  6. POJ 1459(EK)
  7. 2015最新iherb海淘攻略-图文入门教程
  8. SpringMVC 无法访问到指定jsp页面可能的原因
  9. 深入理解java虚拟机之java内存区域
  10. [Swift]LeetCode665. 非递减数列 | Non-decreasing Array
  11. 像素数据YUV简介与觉存储格式介绍
  12. PL/SQl编程 基本语法
  13. CReLU激活函数
  14. 一、Selenium 工作原理
  15. VSCode代码修改后跑起来没反应,打开本地文件,代码没变化
  16. dart基础语法
  17. Android——MeasureSpec学习 - 解决ScrollView嵌套ListView和GridView冲突的方法
  18. HttpServletRequest -- 获取请求主机真实的IP地址
  19. 14西安区域赛C - The Problem Needs 3D Arrays
  20. rvm is not a function的解决方法

热门文章

  1. mac python3 安装mysqlclient
  2. 【VNCserver】Centos7.4安装VNC连接华为云或亚马逊云
  3. zabbix--自定义监控项vsftpd
  4. 软件测试生命周期(STLC)的8个阶段的详细信息
  5. Flutter初探与环境搭建
  6. 图论 - Bellman-Ford算法
  7. 织梦DedeCms网站内部SEO详细分析
  8. Spring AOP 知识点入门
  9. rsync+inotify百万级文件实时同步
  10. python基础:zip和dict详解