JVM--基础--19.7--垃圾收集器--G1

news2024/11/25 0:46:19

JVM–基础–19.7–垃圾收集器–G1


1、结构图

2、G1收集器(面向服务端)

2.1、特点

2.1.1、并行于并发

使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间,其他需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行。

2.1.2、分代收集

虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念。它能够采用不同的方式去处理新创建的对象和已经存活了一段时间,熬过多次GC的旧对象以获取更好的收集效果。

2.1.3、空间整合

与CMS的"标记–清理"算法不同,G1从整体来看是基于"标记整理"算法实现的收集器;从局部上来看是基于"复制"算法实现的。

但无论如何,都意味着G1运作期间不会产生内存空间碎片,收集后能够提供规整的可用内存,这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前触发下一次GC。

2.1.4、可预测的停顿

这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同关注点, 但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。

2.2、存储内存结构

  1. G1会将堆划分为固定大小的多个区域,名称为Region
  2. 每一个Region都有对应一个remembered set(避免全堆扫描,记录每个对象是否可达)
  3. 依然存在eden,S0,S1,old这些概念,不同的是是采用逻辑区分,而不是物理区分
  4. 每个heap区(Region)的大小在JVM启动时就确定了,JVM 通常生成 2000 个左右的heap区
  5. 根据堆内存的总大小,一个Region的大小可以通过参数-XX:G1HeapRegionSize设定,范围允许为 1Mb 到 32Mb,且是2的指数倍。

2.3、优先列表

G1跟踪各个region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。

这种使用Region划分内存空间以及有优先级的区域回收方式,保证了G1收集器在有限的时间内可以获取尽可能高的收集效率。

2.4、收集步骤

2.4.1、标记标记(Initial Marking)

停顿用户,耗时很短,只是标记一下GC Roots能直接关联到的对象,并且修改TAMS(Next Top At Mark Start)的值,让下一个阶段用户程序并发运行时,能在正确可用的Region中创建新对象。

2.4.2、并发标记(Concurrent Marking)

GC Root开始对堆中对象进行可达性分析,找出存活的对象,这阶段时耗时较长,但可与用户程序并发执行。

2.4.3、终标记阶(Final Marking)

为了修正在并发标记期间因用户程序继续运作而导致标记产生变动的那一部分标记记录,虚拟机将这段时间对象变化记录在线程Remenbered Set Logs里面,最终标记阶段需要把Remembered Set Logs的数据合并到Remembered Set中。

这一阶段需要停顿线程,但是可并行执行。

2.4.4、筛选回收

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

​汽车芯片的可靠性设计:控制亚稳态,提升稳定性

【作者简介】Dr. Roy 复睿微 IC后端工程师,南开大学与韩国首尔国立大学联合培养博士。博士期间发表高水平学术期刊论文多篇,其中一作一区封面文章2篇;授权发明专利5项。同时,在先进工艺大芯片的静态时序分析、芯片设计流程提效优化…

对某擦边站点的一次渗透

更新时间:2022.07.05 2022年11月21日21:50:12 1. 说明 在上半年的时候,在线浏览网页的时候,突然跳转到了一个sese的界面,然后要下载app,本着弹出即下载的原则,我就欣然安装了: app本身长这样…

Dubbo架构设计与源码解析(一) 架构设计

作者:黄金 一、架构演变 单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构 二、Dubbo总体架构 1、角色职能 • Container:服务容器 (tomcat、jetty、weblogic) • Provider&#xf…

Web Spider NEX XX国际货币经纪 - PDF下载 提取关键词(二)

Web Spider NEX XX国际货币经纪 - PDF下载 & 解析 首先声明: 此次案例只为学习交流使用,切勿用于其他非法用途 文章目录Web Spider NEX XX国际货币经纪 - PDF下载 & 解析前言一、任务说明1.PDF下载2.PDF解析提取关键词数据二、Pip模块安装三、网站分析四、核…

【解决】Unity Player Log 自生成造成磁盘满占用率问题

开发平台:Unity 2020 编程平台:Visual Studio 2022 编程语言:CSharp   问题描述 Unity 工程完成打包与发布过程后,在运行时生成大量 Player Log 的日志文件导致其所在盘占用率满额问题。通常情况下,这类日志文件信息…

微信小程序开发—入门到跑路(三)

3、微信小程序第三天 1、学习目标 知识点名称知识点内容难度系数要求程度页面导航声明式导航、编程式导航、导航传参3星掌握页面事件下拉刷新、上拉触底、上拉触底案例、自定义编译模式3星掌握生命周期生命周期分类、应用生命周期、页面生命周期3星掌握wxs学习认识wxs及应用场…

百度工程师带你探秘C++内存管理(ptmalloc篇)

作者 | daydreamer 前篇《探秘C内存管理(理论篇)》主要介绍了Linux C程序内存管理的理论基础,本文作为系列文章《探秘C内存管理》的第二篇,将会探讨经典内存管理器ptmalloc如何管理C程序的内存。借助剖析ptmalloc解决问题的着重点…

攻防世界-easyphp

题目 访问url进入靶场&#xff0c;阅读php代码 <?php highlight_file(__FILE__); $key1 0;//值赋值 $key2 0;$a $_GET[a];//get方法获取值 $b $_GET[b];if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){ //a的值需要大于 6000000&…

Python:如何使用正则表达式快速处理字符串

文章目录前言一、正则表达式1、元字符详解2、等价方法&#xff08;速记&#xff09;二、常用的表达式1、常用的正则表达式2、先行断言和后行断言三、Python匹配函数1、Match函数2、Search函数3、Findall函数四、regex101网站推荐前言 1、正则表达式是对字符串操作的一种逻辑公…

Android Studio使用Mob实现短信验证功能遇到的问题解决

一、Mob短信验证 全球领先的数据智能科技平台-MobTech袤博解决 进行注册登入 登入成功后&#xff0c;点击开发者服务中的短信验证&#xff0c;进入开发者平台 填好信息创建成功后显示下图&#xff0c;可以看到对应信息如下&#xff08;注意记住AppKey和AppSecretKey&#xff…

怎样让Odoo 16自动根据销售订单创建采购订单或生产订单

我们在销售产品时通常只处理销售过程&#xff0c;但是&#xff0c;在根据消费者的要求交付给消费者之前&#xff0c;产品会必须有库存。这时候&#xff0c;货物要么从车间「生产」&#xff0c;要么从供应商「采购」。当销售订单确认但商品缺货时&#xff0c;我们偶尔不得不先获…

vite.config.ts--服务器、简化导入写法、element-plues按需导入的配置

vite.config.ts--服务器、简化导入写法、element-plues按需导入的配置说明一、服务器server二、简化导入写法三、element-plus按需导入完说明 本教程适用于vite创建的前端项目服务器server简化导入写法element-plus按需导入 一、服务器server import { defineConfig } from …

MFC界面控件BCGControlBar v33.3 - 编辑控件功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.3已正式发布了&#xff0c;该版本包含了增强的Ribbon自定义、新的…

[附源码]计算机毕业设计Python点餐系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

智能座舱进入多元化交互时代,本土芯片厂商如何领跑?

“智能座舱市场正在进入一个全新的发展阶段。”芯驰科技资深产品市场总监金辉在2022高工智能汽车年会上表示&#xff0c;智能座舱已经进入了多屏互动、多模交互、多人交互等多元化交互时代。 芯驰科技资深产品市场总监金辉 作为未来的“第三生活空间”以及主机厂差异化竞争的焦…

【问答篇】Java 线程篇 面试题(一)

每天进步一点~ (ps: 文章内容及图片出处来自本人公众号~) 01、问&#xff1a;请谈谈你对并发编程优缺点的认识与理解 ~ 答&#xff1a; 优点&#xff1a;充分利用多核CPU的计算能力&#xff0c;通过并发编程的形式将多核CPU的计算能力发挥到极致&#xff0c;性能得到提升。 …

【Java编程】MVC框架和经典三层结构

MVC框架和经典三层结构1.MVC框架 JSP&#xff0c;全称 Java Server Pages&#xff0c;中文名是 Java 服务器页面&#xff0c;其实是一种以 Java 为主的跨平台 Web 开发语言。JSP 文件由传统网页 HTML 文件插入 Java 程序段所形成&#xff0c;实现了 HTML 语法的 Java 扩张。在…

一篇文章了解 Apache Druid

前言 本文隶属于专栏《大数据技术体系》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见大数据技术体系 概述 Apache Druid 是一个实时分析型数据库&#xf…

图文结合带你搞懂MySQL日志之Error Log(错误日志)

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;KAiTO文章来源&#xff1a;社区原创 往期回顾&#xff1a; 图文结合带你搞懂MySQL日志之Redo Log(重做日志)…

[附源码]计算机毕业设计Python的云网盘设计(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…