CMS垃圾收集器三色标记-JVM(十二)

上篇文章说了CMS垃圾收集器是赋值清除,所以他不可以碎片整理,于是jvm支持两个参数,几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源,因为是并行运行,所以会有浮动垃圾。还有执行不确定性,垃圾收集完,继续进入新的对象,导致异常concurrent mode faliture,最后用serial old处理,可以用jvm的fraction参数来参数百分之多少的时候需要GC,这样就预留充足的空间存储新对象。

垃圾收集器CMS-JVM(十一)

  • 实际场景

前面介绍了cms的参数,那么我们如何应用呢?

前面文章我们介绍了parallel作用于年轻代和老年代回收,当时场景是因为回收的对象比较大,不能进入survivor,导致直接从eden进入old,这时候eden满的那一瞬间,也就是minor GC时候最后一个对象不会在年轻代回收,进入老年代,当时我们通过设置年轻代大小的参数,来解决了减少fullGC的问题。

 

那我们现在既然学习了cms和parNew,就试着用新的方法来解决。

前面我们的参数jvm参数配置是:

Java -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M

-XX:MaxMetaspaceSize=256M -XX SurvivorRatio=8

这样配合当时的应用场景绝对不发生fullGc是不可能的。当时我们的场景是每秒产生60MB,但如果峰值增加,在23秒,24秒的时候,每次cpu分配给单个线程的运行已经超过几秒,这时候minor GC的时候会超过60M的数据移动到survivor,这时候200M的S0已经未必放的下这些存活的数据,需要移动到old,这时候当old满的时候又会触发fullGC。

但这种秒杀场景,即使出现这种情况影响也不大,因为当old满的时候,秒杀的前10分钟已经过去,这时候发生一次fullGC也不影响。

Java -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M

-XX:MaxMetaspaceSize=256M -XX SurvivorRatio=8

-XX:MaxTenuringThreshold=5 -XX:PretenureSizeThreshold=1M

-XX:UseParNewGC -XX:+UseConcMarkSweepGC

-XX:UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3

这个参数一次的fullGC不会存在大量参数,所以一次未必需要整理,配置两到三次都没有问题。

  • 三色标记

这个底层并不是java实现,而是c++实现的。

前面说了在gc发生的时候,用户线程和垃圾回收线程并行运行,对于多标和漏标的情况可能会发生。

多标影响还好,可以在下一次gc的时候清除,在并发标记的时候,就会存在多标的现象,但是少标或者漏标影响比较大。

三色标记指GCroots 可达性分析遍历对象过程中遇到的对象,按照是否访问过标记为三种颜色。

黑色:表示对象已经被垃圾收集器访问过,且这个对象所有引用都扫描过,它是存活的对象。如果其他对象引用指向黑色,无须重新扫描。黑色对象不可以直接(不经过灰色对象)指向某个白色对象。

灰色:表示对象已经被垃圾回收访问过,但至少还有一个或者以上引用没被扫描到。

白色:表示对象未被垃圾回收器访问过。

前面说的多标浮动垃圾对象,三色标记的处理办法则是直接标记成黑色,本轮GC不会清除,但是下一轮则可能部分对象变为垃圾对象。

漏标-读写屏障

漏标则会把未标记的对象无删除,这种验证bug则会有两种办法解决,增量更新和原始快照

漏标会找到之前的引用,重新去扫描。

增量更新指一旦有新插入的指向白色,则会变成灰色对象。

原始快照则是让对象在本轮gc存活,在下一次gc再清理,可以理解为浮动垃圾。

这些都是在写屏障实现的。

  • 记忆集与卡表

新生代做gcRoots 的时候可能遇到跨代应用场景,这时候总不能再去old代理扫描一遍。

于是新生代里有一个记录集(remember set)数据结构,记录这种跨代应用的对象,避免GC roots去老年代扫描。事实上,老年代也有这种问题,G1和ZGC收集器都有这种问题。

hotSpot使用叫做卡表Cardtable的方式实现这种收集,也是目前最常用的一种方式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业需要一个数字体验平台(DXP)吗?

数字体验平台是一个软件框架,通过与不同的业务系统喝解决方案集成,帮助企业和机构建立、管理和优化跨渠道的数字体验。帮助企业实现跨网站、电子邮件、移动应用、社交平台、电子商务站点、物联网设备、数字标牌、POS系统等传播内容,除了为其中…

【ArcGIS Pro二次开发】(48):三调土地利用现状分类面积汇总统计

之前做了一个三调三大类面积统计,有小伙伴反映太粗糙,想要一个完整的地类面积汇总表。 【ArcGIS Pro二次开发】(35):三调三大类面积统计 本质上并没有多少难度,之前也做过类似的用地用海汇总表,于是拿出来改一改就好了…

【已解决】天翼电信宽带改桥模式,使用路由器ppoe拨号

运营商在给办理宽带时会默认给宽带设置成光猫ppoe拨号,路由器只需设置为dhcp获取ip,插入到光猫的lan口即可上网。但运营商的光猫路由性能有限,会影响到网络体验。而将光猫设置为桥模式,使用路由器拨号,可以实现路由器进…

【C语言】深剖数据在内存中的存储

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

酷开科技大屏营销,撬动营销新增量

5G、人工智能、元宇宙等技术的发展促使数字营销的内容、渠道、传播方式发生了一系列变化;存量竞争下,增长成为企业更加迫切、更具挑战的课题,品牌营销活动越来越围绕“生意增长”和“提效转化”的目标展开。 如今的市场环境下,产…

Nacos(服务注册与发现)+SpringBoot+openFeign项目集成

📝 学技术、更要掌握学习的方法,一起学习,让进步发生 👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。 💐学习建议:1、养成习惯,学习java的任何一个技术…

基础语言模型LLaMA

LLaMA包含从7B到65B参数的基础语言模型集合。Meta在数万亿个tokens上训练了模型,LLaMA-13B在大多数基准测试中优于GPT-3(175B)。 来自:LLaMA: Open and Efficient Foundation Language Models 目录 背景概述方法预训练数据架构Op…

openGauss学习笔记-09 openGauss 简单数据管理-创建数据库

文章目录 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库9.1 语法格式9.2 参数说明9.3 示例 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库 数据库安装完成后,默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。 9.1 语法格式…

Appium+python自动化(十一)- 元素定位- 下卷超详解)

1、 List定位 List故名思义就是一个列表,在python里面也有list这一个说法,如果你不是很理解什么是list,这里暂且理解为一个数组或者说一个集合。首先一个list是一个集合,那么他的个数也就成了不确定性,所以这里需要用复…

C\C++ 使用exception类,抛出自定义异常并捕获

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 抛出异常&#xff0c;并捕获 exception 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <exception> #include <stdexcept&g…

C# OpenCvSharp+DlibDotNet 人脸替换 换脸

效果 Demo下载 项目 VS2022.net4.8OpenCvSharp4DlibDotNet 相关介绍参考 代码 using DlibDotNet; using OpenCvSharp.Extensions; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Dra…

和为 K 的子数组——前缀和+哈希

题目链接&#xff1a;力扣 注意&#xff1a;此题不能使用滑动窗口&#xff0c;因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大&#xff0c;左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性 已知sum[i]是从nums[0~i]的和&#x…

实现小程序商城首页【源码公开】

效果图 页面源码 <view class"index-container"><view class"header"><!--搜索框【仅样式&#xff0c;不做处理】 start--><van-search bindtap"clickSearch" disabled shape"round" background"#9c7bf0&q…

Pycharm安装dlib

目录 一、下载dilb 二、使用pip安装dlib库(亲测有效) 三、使用Pycharm安装(未使用) 一、下载dilb 官方网址:德利卜 皮皮 (pypi.org) 二、使用pip安装dlib库(亲测有效) 将下载好的whl文件放入工程文件中 接下来使用Python自带的pip进行安装 1.winR2.输入cmd&#xff0c;回车…

MySQL第六章、JDBC编程

目录 一、数据库编程的必备条件 二、Java的数据库编程&#xff1a;JDBC 三、JDBC工作原理 四、JDBC使用 4.1JDBC开发案例 一、数据库编程的必备条件 编程语言&#xff0c;如Java&#xff0c;C、C、Python等数据库&#xff0c;如Oracle&#xff0c;MySQL&#xff0c;SQL S…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件&#xff0c;网络安全服务等板块&#xff0c;总体来看&#xff0c;十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5&#xff0c;这个能为我们所有人创造更安全的数字世界的企业&#xff0c;在应用及API交…

Linux下使用命令行和配置文件两种方式实现主从复制

一、什么是主从复制&#xff1f; Redis的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据复制机制&#xff0c;其中一个Redis实例充当主节点&#xff08;Master&#xff09;&#xff0c;而其他一个或多个Redis实例则充当从节点&#xff08;Slave&#xff…

基于GIS的生态敏感性评价与产业路径选择研究:以江西省吉安市为例

导读: 确立绿水青山就是金山银山的理念,建立生态经济体系,是新时代生态环境保护与经济发展的协调之道。对产业规划而言,与生态同行,构建绿色产业体系,是推动地区高质量发展的根本要求。鉴于此,文章从实证角度出发,以江西省吉安市为研究对象,采用生态敏感性评价方法,选…

【EXCEL】通过url获取网页表格数据

目录 0.环境 1.背景 2.具体操作 0.环境 windows excel2021 1.背景 之前我用python的flask框架的爬虫爬取过豆瓣网的电影信息&#xff0c;没想到excel可以直接通过url去获取网页表格内的信息&#xff0c;比如下图这是电影信息界面 即将上映电影 (douban.com) 通过excel操作&…

(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

❓ 剑指 Offer 31. 栈的压入、弹出序列 难度&#xff1a;中等 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序…