Java:JDK8 GC中ParNew和CMS的问题说明
JDK8中常用如下的垃圾收集器,它们分别运用在年轻代和老年代:
ParNew : 年轻代垃圾收集器,多线程,采用标记—复制算法。
CMS:老年代的收集器,全称(Concurrent Mark and Sweep),是一种以获取最短回收停顿时间为目标的收集器。
可以通过如下JVM参数进行配置:
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
一、ParNew
意为“Parallel New Generation”,需要说明的是, ParNew虽然是个minor gc,但它会Stop-The-World。因此ParNew间隔时间越长越好,并且每次执行的时间越短越好。下面是一次ParNew打印的日志
[GC (Allocation Failure) [ParNew: 367523K->1293K(410432K), 0.0023988 secs] 522739K->156516K(1322496K), 0.0025301 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
其中的时间分别表示如下:
- 用户态消耗的CPU时间
- 内核态消耗的CPU事件
- 操作从开始到结束所经过的墙钟时间(Wall Clock Time)
这里需要说明一下CPU时间与墙钟时间的区别:
墙钟时间包括各种非运算的等待耗时,例如等待磁盘I/O、等待线程阻塞,而CPU时间不包括这些耗时,但当系统有多CPU或者多核的话,多线程操作会叠加这些CPU时间,所以读者看到user或sys时间超过real时间是完全正常的。
因此在查看GC日志时,主要关注real对应的时间。
二、CMS
意为“Concurrent Mark Sweep”,CMS主要分为如下几个阶段
- CMS-initial-mark # 需要Stop the word
- CMS-concurrent-mark
- CMS-concurrent-preclean
- CMS-concurrent-abortable-preclean
- CMS-remark # 需要Stop the word
- CMS-concurrent-sweep
- CMS-initial-mark
这里需要特别关注CMS-initial-mark和CMS-remark这2个阶段,因为这2 个阶段需要Stop-The-World。对于CMS来说,也是间隔时间戟长越好,每次执行时间越短越好。
关于这几个阶段GC日志的具体内容,可以到网上查找,这里就不再一一说明了。
另外,关于CMS需要关注2个JVM参数:
-XX:CMSInitiatingOccupancyFraction
-XX:+UseCMSInitiatingOccupancyOnly
1、-XX:CMSInitiatingOccupancyFraction
老年代堆占用了多大比例时,会做一次CMS。默认值是-1,表示不启用。大于等于0则直接取其值,小于0则根据如下公式来计算:
((100 - MinHeapFreeRatio) + (double)( CMSTriggerRatio * MinHeapFreeRatio) / 100.0) / 100.0
CMSTriggerRatio在JDK1.8是80
MinHeapFreeRatio在JDK1.8是40
2、-XX:+UseCMSInitiatingOccupancyOnly
一直使用上述设定的阈值,如果不指定,JVM仅在第一次使用设定值,后续则自动调整。
三、DefNew
意为“Default New Generation”,新生代Serial收集器中。由于用的少,就不介绍了。它打印的GC日志大概是这样的。
[DefNew: 78656K->78656K(78656K), 0.0000398 secs]
四、一些重要的JVM参数
-Xms -XX:InitialHeapSize 堆内存初始大小
-Xmx -XX:MaxHeapSize 堆内存最大大小
-Xss -XX:ThreadStackSize 单个线程栈大小
-XX:NewSize 新生代初始堆大小
-XX:MaxNewSize 新生代最大堆大小
-XX:OldSize 老年代堆大小
-XX:MetaspaceSize 元数据区初始值(JDK1.8)
-XX:MaxMetaspaceSize 元数据区最大值(JDK1.8)
-XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
-XX:MaxTenuringThreshold 对象从新生代晋升到老年代的年龄阈值,默认值15
-XX:NewRatio 老年代/新生代的堆内存比例,在设置了-XX:MaxNewSize的情况下,-XX:NewRatio的值会被忽略-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintGC
-XX:+PrintGCDetails
使用jinfo查看进程的JVM参数
jinfo -flags <pid>
查看JVM参数默认值的方法
java -XX:+PrintFlagsFinal -version
参考文档
GC(Allocation Failure)引发的一些JVM知识点梳理
https://blog.csdn.net/zc19921215/article/details/83029952
[case9]频繁GC (Allocation Failure)及young gc时间过长分析
https://segmentfault.com/a/1190000013509330
JVM常用参数说明
https://www.cnblogs.com/shjr/p/14667216.html
CMS的CMSInitiatingOccupancyFraction解析
https://blog.csdn.net/insomsia/article/details/91802923
CMS收集器几个参数详解 -XX:CMSInitiatingOccupancyFraction, CMSFullGCsBeforeCompaction
https://blog.csdn.net/liubenlong007/article/details/88541589
Java开发中的问题排查,性能调优,先学会阅读GC日志
https://cloud.tencent.com/developer/article/1478419
JVM中的垃圾收集器 -- CMS
https://blog.csdn.net/wodewutai17quiet/article/details/48895893
相关文章:
Java:JDK8 GC中ParNew和CMS的问题说明
JDK8中常用如下的垃圾收集器,它们分别运用在年轻代和老年代: ParNew : 年轻代垃圾收集器,多线程,采用标记—复制算法。 CMS:老年代的收集器,全称(Concurrent Mark and Sweep)&#…...
学单片机前先学什么?
先学c语言和数字电路 这里默认你说的单片机是51单片机,通过你的问题,我猜你的单片机应该还没有入门,如果是入门的话,一般都是从51单片机开始的。刚好我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从…...
数据可视化:Matplotlib 与 Seaborn
数据可视化是数据分析中至关重要的一部分,它能帮助我们直观地理解数据的分布、趋势和关系。Python 中,Matplotlib 和 Seaborn 是两个最常用的可视化库。本文将详细介绍如何使用 Matplotlib 和 Seaborn 进行数据可视化,包括基本图形、图形定制…...
【linux】自定义快捷命令/脚本
linux自定义快捷命令 场景自定义命令自定义脚本 场景 深度学习经常要切换到自己环境,conda activate mmagic,但是又不想每次重复打这么多字,想使用快捷命令直接切换。 自定义命令 使用别名(alias)或自定义脚本来创建…...
使用onnxruntime加载YOLOv8生成的onnx文件进行目标检测
在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集,使用 LabelMe 工具进行标注,然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件,并自动生成YOLOv8支持的目录结构,包括melon.yaml文件,其内容…...
QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数
在窗体里放置一个单行文本编辑控件(QLineEdit)、一个标签控件(QLabel)和一个文本浏览控件(QTextBrowser),在单行文 本编辑控件里的文本被编辑时,标签控件和文本浏览控件都会同步显示…...
C++ AVL树 详细讲解
目录 一、AVL树的概念 二、AVL树的实现 1.AVL树节点的定义 2.AVL树的插入 3.AVL树的旋转 4.AVL树的验证 三、AVL树的性能 四、完结撒❀ 一、AVL树的概念 二叉搜索树虽可以缩短查找的效率,但 如果数据有序或接近有序二叉搜索树将退化为单支树,查 …...
Faster R-CNN:端到端的目标检测网络
本文回顾了由微软研究人员开发的 Faster R-CNN 模型。Faster R-CNN 是一种用于物体检测的深度卷积网络,在用户看来,它是一个单一的、端到端的统一网络。该网络可以准确快速地预测不同物体的位置。为了真正理解 Faster R-CNN,我们还必须快速概…...
如何给 MySQL 表和列授予权限?(官方版)
目录 授予表级别权限 授予列级别权限 如何给MySQL表和列授予权限是MySQL数据操作中非常重要的步骤,也是企业级使用MySQL数据库的起步点,以下分别参照官方教程整理的MySQL数据库的权限操作。 以下的语句可以直接使用MySQL的命令行进行操作(如何…...
攻防世界testre做法(考点:base58)
在做这道题目之前,我们先来简单了解一下base64加密和base58加密,先来说一些预备知识,bit为1个位,即一个0或1,八个位组成一个字节,即八个二进制数。 base64编码原理:1,在使用base64加…...
计算机视觉与模式识别实验1-1 图像的直方图平衡
文章目录 🧡🧡实验流程🧡🧡1.读入图像‘rice.png’,在一个窗口中显示灰度级n64,128和256的图像直方图。2.调解图像灰度范围,观察变换后的图像及其直方图的变化。3.分别对图像‘pout.tif’和‘ti…...
【C++课程学习】:C++入门(函数重载)
🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🌈函数重载: 🍉1.参数个数不同: 🍉2.参数…...
skywalking介绍及搭建
链路追踪框架比对: skywalking安装部署: 下载地址:Downloads | Apache SkyWalking 配置微服务与skywalking整合: copy agent/optional-plugins/apm-spring-cloud-getway-xx.jar到plugins,然后重启skywalking 监控界面…...
分析示例 | Simufact焊接工艺仿真变形精确预测汽车结构
导语 焊接是汽车制造过程中一个关键环节,白车身、发动机、底盘和变速箱等都离不开焊接工艺的应用,主要涉及气保焊、电阻点焊、激光焊、电子束焊等多种焊接工艺。由于汽车车型众多、成形结构复杂、汽车制造质量、效率、成本等方面的综合要求。如何高效、…...
模式识别选择题
影响K-均值聚类算法效果的主要因素之一是什么? A. 初始聚类中心的选取 B. 样本输入顺序 C. 模式相似性测度 D. 分类准则 答案:A支持向量机(SVM)在处理非线性问题时,通常使用什么方法? A. 引入核函数 B. 增加…...
【Java基础】线程方法
start():启动线程,使线程进入就绪状态。 run():线程执行的代码逻辑,需要重写该方法。 停止线程 void interrupt() 中断线程,让它重新去争抢cpu 如果目标线程长时间等待,则应该使用interrupt方法来中断等待…...
C++之动态数组
C给我们提供了一个叫Vector的类,这个Vector在std命名空间中。这个Vector有点像一个集合,一个不强制其实际元素具有唯一性的集合,和数组一样,但是和C普通的数组又不太一样,和标准的数组不同当你创建Vector时,…...
使用 image-combiner 开源项目实现对海报图片的生成
1:gitee 项目地址 image-combiner: ImageCombiner是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于…...
【缓存】框架层常见问题和对策
缓存是为了加快读写速度,再了解redis这类框架层的缓存应用之前,我们不妨先思考下操作系统层面的缓存解决方案,这样有助于我们更深的理解缓存,哪些是系统层面的,哪些是服务层面。 以下是一些常见的缓存问题及其解决方案…...
【FAS】《CN103106397B》
原文 CN103106397B-基于亮瞳效应的人脸活体检测方法-授权-2013.01.19 华南理工大学 方法 / 点评 核心方法用的是传统的形态学和模板匹配,亮点是双红外发射器做差分 差分:所述FPGA芯片控制两组红外光源(一近一远)交替亮灭&…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
