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-markCMS-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

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

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

相关文章

[消息队列 Kafka] Kafka 架构组件及其特性(二)Producer原理

这边整理下Kafka三大主要组件Producer原理。 目录 一、Producer发送消息源码流程 二、ACK应答机制和ISR机制 1&#xff09;ACK应答机制 2&#xff09;ISR机制 三、消息的幂等性 四、Kafka生产者事务 一、Producer发送消息源码流程 Producer发送消息流程如上图。主要是用…

国自然基金的检索

&#xff08;1&#xff09;网址 跳转国自然基金网址&#xff1a;https://www.nsfc.gov.cn/ &#xff08;2&#xff09;查询入口 &#xff08;3&#xff09;进行查询

【LeetCode 滑动窗口】LC_3_无重复字符的最长子串

文章目录 1. 无重复字符的最长子串 1. 无重复字符的最长子串 题目链接&#x1f517; &#x1f34e;题目思路&#xff1a;&#x1f427;① 滑动窗口的思想&#xff1b;&#x1f427;② 用什么来维护窗口呢 &#xff1f; 用 双指针 和 unordered_set来维护&#xff0c;为什么呢…

标题:深入探索Linux中的`ausyscall`

标题&#xff1a;深入探索Linux中的ausyscall&#xff08;注意&#xff1a;ausyscall并非Linux内核标准命令&#xff0c;但我们可以探讨类似的概念&#xff09; 在Linux系统中&#xff0c;系统调用&#xff08;syscall&#xff09;是用户空间程序与内核空间进行交互的一种重要…

Git介绍及应用

1.简介 Git是一个分布式版本控制器&#xff0c;通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件&#xff0c;Git仓库分为两种&#xff1a; 本地仓库:开发人员自己电脑上的Git仓库远程仓库:远程服务器上的Git仓库 2.执行流程 3.Git代码托管服务…

【TB作品】MSP430F5529 单片机,温度控制系统,DS18B20,使用MSP430实现的智能温度控制系统

作品功能 这个智能温度控制系统基于MSP430单片机设计&#xff0c;能够实时监测环境温度并根据预设的温度报警值自动调节风扇和加热片的工作状态。主要功能包括&#xff1a; 实时显示当前温度。通过OLED屏幕显示温度报警值。通过按键设置温度报警值。实际温度超过报警值时&…

【经验分享】嵌入式入坑经历(选段)

文章目录 你现在的工作中所用到的专业知识有哪些呢&#xff1f;为什么想转行了&#xff1f;后来为什么从事了嵌入式行业呢?你对嵌入式的兴趣是何时培养起来的?你是怎么平衡兴趣爱好和工作的关系的?平时做的事情对你现在的工作有哪些帮助?对于有志学习嵌入式开发的在校大学生…

【96】write combine机制介绍

前言 这篇文章主要介绍了write combine的机制 一、write combine的试验 1.系统配置 &#xff08;1&#xff09;、CPU&#xff1a;11th Gen Intel(R) Core(TM) i7-11700 2.50GHz &#xff08;2&#xff09;、GPU&#xff1a;XX &#xff08;3&#xff09;、link status&am…

MySQL(四) - SQL优化

一、SQL执行流程 MySQL是客户端-服务器的模式。一条SQL的执行流程如下&#xff1a; 在执行过程中&#xff0c;主要有三类角色&#xff1a;客户端、服务器、存储引擎。 大致可以分为三层&#xff1a; 第一层&#xff1a;客户端连接到服务器&#xff0c;构造SQL并发送给服务器…

Python | 排队取奶茶

队列的基本概念&#xff08;队头、队尾&#xff09;和特点&#xff08;先入先出&#xff09; 在 Python 语言中&#xff0c;标准库中的queue模块提供了多种队列的实现&#xff0c;比如普通队列和优先级队列&#xff0c;因此你可以使用queue.Queue类来创建队列&#xff0c;不过…

惠海 H5528 升降压芯片 12V24V36V48V60V75V LED恒流驱动IC 调光细腻顺滑无阶梯感

惠海H5528是一款升压、降压、升压降压的LED恒流驱动IC&#xff0c;其具备宽范围调光比且无频闪调光的特性&#xff0c;使得它在智能照明、Dali调光、0~10V调光、摄影灯照明以及补光灯照明等多种应用中具有广泛的应用前景。 这款芯片支持降压、升压和升降压拓扑的应用&#xff0…

C++面向对象程序设计 - 文件操作与文件流

在实际应用中&#xff0c;常以磁盘文件作为对象&#xff0c;即能从磁盘文件读取数据&#xff0c;也能将数据输出到磁盘文件&#xff0c;磁盘是计算机的外部存储器&#xff0c;能够长期保留信息&#xff0c;能读能写&#xff0c;可以刷新重写等等。 在C中&#xff0c;文件操作通…

Flink Rest Basic Auth - 安全认证

背景 公司目前需要将Flink实时作业云化,构建多租户实时计算平台。目前考虑为了资源高效利用,并不打算为每个租户部署一套独立的Kubernetes集群。也就意味着多个租户的作业可能会运行在同一套kubernets集群中。此时实时作业的任务就变的很危险,因为网络可能是通的,就会存在…

106.网络游戏逆向分析与漏洞攻防-装备系统数据分析-在UI中显示装备与技能信息

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

新媒体暴力起号必备因素!沈阳新媒体运营培训学校

1周涨粉10w&#xff1f;这对普通人来说可以说是天文数字&#xff0c;但只要掌握方式方法&#xff0c;普通人也能做到&#xff01; 面试经验丰富的人都深知&#xff0c;给面试官留下的第一印象相当重要&#xff0c;几乎决定了80%的面试机会。标题也是如此&#xff0c;在完成一篇…

Android SBL是什么

Android SBL&#xff08;Secondary Bootloader&#xff09;是Android系统中一个关键的组成部分&#xff0c;它属于Bootloader的二级引导程序。以下是关于Android SBL的详细解释&#xff1a; 定义&#xff1a; SBL是Secondary Bootloader的缩写&#xff0c;中文称为第二级引导程…

中国剩余定理学习

中国剩余定理( C R T CRT CRT)及其扩展( E X C R T EXCRT EXCRT)详解 基本形式 中国剩余定理给出了以下的一元线性同余方程组的解&#xff1a; { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) \begin{cases} x \equiv a_1 \pmod{m_1} \\ x \eq…

力扣209.长度最小的数组

力扣209.长度最小的数组 模版滑窗求最小 class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int n nums.size(),resn1;int sum 0;for(int i0,j0;i<n;i){sum nums[i];//尽可能缩小区间while(sum - nums[j] > target){sum - num…

[经验] 蝉联一词的含义是什么 #知识分享#职场发展

蝉联一词的含义是什么 蝉联这个词起源于古代中国&#xff0c;最初是指天子连续两年以上的年号相同。后来&#xff0c;这个词被用于形容某个人或某个团体连续多次获得某种荣誉或奖项的情况。在现代生活中&#xff0c;我们常常听到某个体育运动员蝉联冠军、某个企业蝉联业绩排行榜…

荆州餐饮环保在行动:清洗油烟净化器,守护城市环境

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在荆州&#xff0c;餐饮业不仅是美食爱好者的天堂&#xff0c;更是城市生活的重要组成部分。然而&#xff0c;随着餐饮业的发…