JVM系列——垃圾收集器Parrlel Scavenge、CMS、G1常用参数和使用场景

news2024/11/15 10:58:39

背景

当前在Java领域,JDK 8版本仍然享有广泛的使用,它支持了Parallel Scavenge、CMS和G1这几种垃圾收集器。因此,为了在业务应用中更加高效地进行开发和性能调优,我们需要对这些垃圾收集器的工作原理和特性有一个全面的理解和认识。

在这里插入图片描述

本文主要梳理了上述三种垃圾收集器(Parallel Scavenge、CMS和G1)的常用配置参数和使用场景,以便在实际应用中能够更加精准地调优和应对不同的性能需求。

简介

Parallel Scavenge是JDK8默认的垃圾收集器,其年轻代使用Parallel并行收集器进行垃圾回收;老年代使用Parallel Old并行收集器进行垃圾回收。

CMS在JDK1.5版本引入,JDK8中年轻代使用ParNew 收集器进行垃圾回购;老年代使用CMS收集器进行垃圾回收;极端情况下时会使用Serial收集器进行兜底Full GC。

G1一款在server端运行的垃圾收集器,专门针对于拥有多核处理器和大内存的机器,在JDK 7u4版本发行时被正式推出,在JDK9中更被指定为官方GC收集器。基于分区算法实现垃圾回收。

常用参数

Parrllel Scavenge回收器

-XX: +UseParallelGC
手动指定年轻代使用Parallel并行收集器执行内存回收任务。

-XX: +UseParallelOldGC
手动指定 老年代都是使用并行回收收集器

-XX:ParallelGCThreads
设置年轻代并行收集器的线程数。

-XX:MaxGCPauseMillis
设置垃圾收集器最大停顿时间(,(即STW的时间)。单位是亳秒

-XX : GCTimeRatio
垃圾收集时间占总时间的比例,用于衡量吞吐量的大小。默认值99

-XX: +UseAdaptiveSizePolicy
设置Parallel Scavenge收集器具有自适应调节策略

CMS回收器

-XX: +UseConcMarkSweepGC
手动指定使用CMS收集器执行内存回收任务。

-XX: CMSlnitiatingOccupanyFraction
设置堆内存使用率的阈值,一旦达到该阅值,便开始进行回收。

-XX: +UseCMSCompactAtFullCollection
用于指定在执行完Full GC后对内存空间进行压缩整理,以此避免内存碎片的产生。不过由于内存压缩整理过程无法并发执行,所带来的问题就是停顿时间变得更长了。

-XX: CMSFullGCsBeforeCompaction
设置在执行多少次Full GC后对内存空间进行压缩整理。

-XX: ParallelCMSThreads
设置CMS的线程数量

G1回收器

-XX: +UseG1GC
手动指定使用G1收集器执行内存回收任务。

-XX :G1HeapRegionSize
设置每个Region的大小。值是2的幂,范围是1MB到32MB之间,目标是根据最小的Java堆大小划分出约2048个区域。默认是堆内存的1/2000。

-XX:MaxGCPauseMillis
设置期望达到的最大Gc停顿时间指标(JVM会尽力实现,但不保证达到)。默认值是200ms

-XX: ParallelGCThread
设置STS工作线程数的值。最多设置为8

-XX:ConcGCThreads
设置并发标记的线程数。将n设置为并行垃圾回收线程数(ParallelGCThreads)的1/4左右。

-XX: InitiatingHeapOccupancyPercent
设置触发并发GC周期的Java堆占用率阈值。超过此值,就触发GC。默认值是45。

使用场景

Parrllel Scavenge回收器

最大化应用程序吞吐量。该垃圾收集器会动态调整分区大小。

CMS回收器

最小化GC的中断和停顿时间。

G1回收器

面向服务端你,针对具有大内存、多处理器的机器。

最主要是低GC延迟,并具有大堆的应用程序提供解决方案。

特定情况下用来替换CMS收集器:

  • 50%的Java堆被活动数据占用
  • 对象分配率或老年代提升频率变化很大
  • GC停顿时间过长,0.5秒以上
  • G1 GC当JVM的GC现场处理速度慢时,系统会调用应用程序线程加速垃圾回收过程

总结

通过上文的分析,我们可以认识到每种垃圾收集器都有其独特的特性和适用场景,并没有绝对的优劣之分。不过,考虑到JDK版本升级的趋势,采用G1收集器对未来的版本兼容性更为有利。

在实际的生产环境中,通常无需手动调整大量参数,因为JVM能够进行自我调优以达到较好的性能状态。然而,熟悉常用的参数配置不仅有助于我们更深入地理解JVM的垃圾回收机制,还能在必要时对垃圾回收过程进行精细控制,从而优化应用的性能表现。

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

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

相关文章

【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络

课题名称:基于自适应SPREAD-PNN的乳腺肿瘤诊断分类及预测 版本日期:2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式:私信博主或QQ:491052175 模型描述: 威斯康辛大学医学院经过多年的收集和整理&…

Rust 第一个rust程序Hello Rust️

文章目录 前言一、vscode 安装rust相关插件二、Cargo New三、vscode调试rustLLDB 前言 Rust学习系列。今天就让我们掌握第一个rust程序。Hello Rust 🦀️。 在上一篇文章我们在macOS成功安装了rust。 一、vscode 安装rust相关插件 以下是一些常用的 Rust 开发插件…

【Java程序设计】【C00245】基于Springboot的家政服务管理平台(有论文)

基于Springboot的家政服务管理平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的家政服务管理平台 本系统分为前台模块、管理员功能模块、用户功能模块以及服务人员功能模块。 前台模块:系统首页的…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面,旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户,都可以在本文中找到对应的内容,加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制) 目录 回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注…

2024 AI 前端:回首展望,光芒未至,破晓之前!

前言 回望 2023 年,ChatGPT 的突然爆火,让 AI 无疑成为最为值得注目的新兴领域之一,我们也一起见证了生成式 AI 的寒武纪大爆发。这一年来,国内外的生成式 AI 、大模型和相关产品以令人眼花缭乱的速度更新迭代,新的创业…

day29 M端事件

M端事件 移动端也有自己独特的地方,比如触屏事件touch(也称触摸事件)touch对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。触屏事件可响应用户手指(或触控笔)对屏幕或触控板操作。常见的触…

如何从零创建一个机器人模型

1.URDF建模原理 2.机械臂URDF建模 3.三维模型导出URDF 第一步:下载三维模型,并给每个关节设置旋转轴(基准轴) 第二部:下载 SolidWorks to URDF Exporter 插件 网址:sw_urdf_exporter - ROS Wiki 第三步…

Win10系统搭建个人hMailServer邮件服务结合内网穿透远程发邮件

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

Python tkinter (14) —— 按键事件

本文主要介绍Python tkinter 几种按键事件及其示例。 目录 按键事件 响应所有按键事件 窗体绑定事件 响应特殊按键事件 指定按键事件 组合按键事件 总结 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Python tkinter (2) —— But…

IP 了解

参考:5.1 IP 基础知识全家桶 | 小林coding IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信。 什么是 IP 地址&#xff1f…

大创项目推荐 题目:基于深度学习的人脸表情识别 - 卷积神经网络 大创项目推荐 代码

文章目录 0 简介1 项目说明2 数据集介绍:3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…

apipost 简单的性能压测总结

1、简单的使用机型牌评估 1)jdk默认256M给100用,推荐给1000人同时用JVM 堆栈建议2G~4G(目前定了机型4核8G内存 2T磁盘做radio0存储); 2)数据库配置文件写了占了2G内存(my.cnf文件&#xff09…

2024/1/30 dfs与bfs

想要了解dfs与bfs,就得了解队列和栈。 一、栈与队列 1.栈 栈说白了就是先入后出。把栈类比为一个容器。只有一个口,所以如果我们想要取出最底层也就是最先放入的元素,只能最后取出它。 栈基础操作有如下几种: push 放入pop 拿…

车载以太网:PHY(物理层)介绍

0 工具准备 TJA1101B芯片手册 TJA1101B automotive Ethernet PHY手册 IEEE802.3-2018.pdf 1 车载以太网PHY(物理层)介绍 常见的普通以太网分为10BASE-2、10/100BASE-TX和1000BASE-T,一般都使用RJ45接口,对于1000BASE-T来说&#…

LabVIEW风力发电机在线监测

LabVIEW风力发电机在线监测 随着可再生能源的发展,风力发电成为越来越重要的能源形式。设计了一个基于控制器局域网(CAN)总线和LabVIEW的风力发电机在线监测系统,实现风力发电机的实时监控和故障诊断,以提高风力发电的…

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查 本套教程配套有录播课程和私教课程,欢迎私信我。 Docker部署ElasticSearch7 创建基本容器 docker run -itd --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS=&quo…

上位机图像处理和嵌入式模块部署(linux开发板的选择)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多图像算法是通过上位机来完成的,比如说工业视觉当中的halcon,一般都是要运行在windows平台上面,并且需要高性…

Blender教程(基础)-面的填充-13

一、准备 新建一个立方,删除其中一个面。 二、三角面填充 首先是编辑模式下,选择需要填充的所有边。 鼠标右键弹出填充 填充完是以三角面的形式填充的 编辑模式下,面选择模式,选择刚才填充的两个三角面,然后右键…

谈谈BlueStore

目录 未完待续前言组成前期准备工作基础概念对象PextentextentBlobNode 线程事务磁盘的抽象与分配位图法分层位图 上电流程写流程读流程参考资料 未完待续 前言 BlueStore是什么? Ceph是一个统一的分布式存储系统。BlueStore是Ceph的存储引擎。 它的作用是什么&am…