当前位置: 首页 > news >正文

JVM垃圾收集器和性能调优

目标:

1.JVM垃圾收集器有哪几种?

2.CMS垃圾收集器回收步骤。

一、JVM常见的垃圾回收器

为什么垃圾回收的时候需要STW?

标记垃圾的时候,如果不STW,可能用户线程就会不停的产生垃圾。 

1.1 单线程收集

Serial和SerialOld使用单线程收集

开启参数 -XX:+UserSerialGC

1.2 多线程收集

ParallaNew和ParallaOld采用的多线程收集。

-XX:MaxGCPauseMillis=time 控制垃圾收集的暂停时间。

-XX:GCTimeRatio: 默认99,垃圾回收时间占总时间的大小。吞吐量优先。

PS组合(Paralla Scavenge+ Paralla Old组合),吞吐量优先,空间自适应调整。

200M空间不足,GC后自适应调整为250M。

扩容:伴随着GC,新生代自动扩容。两个参数:

MaxHeapFreeRatio: GC后,最大堆空间剩余比例,缩容。

MinHeapFreeRatio: GC后,最小堆空间剩余空间大小。扩容

堆空间设置为-Xms == -Xmx, 保持一个稳定的堆。

吞吐优先--》响应优先

1.3 响应优先垃圾回收器

CMS是第一款响应优先的垃圾回收器。

二、CMS垃圾回收器

CMS是针对老年代的垃圾收集器。

2.1 初始标记

  • 只标记与GC Roots直接相关连的对象
  • 需要STW

标记对象不是很多。

2.2 并发标记

继续完成标记,对并发标记的对象,继续进行标记,这是比较耗时的操作,不进行STW。 

2.3 重新标记

并发标记因为是并发执行的,此时用户线程可能重新修改了标记对象,因此需要STW,暂停用户线程,对 并发标记阶段变化的对象进行重新标记。

2.4 并发清除

CMS为什么能够做到并打清除呢?

因为CMS采用的是标记清除算法,清理垃圾时存活对象不会发生移动,因此引用地址没有变化,不需要进行STW。

2.5 预清理和并发可中断预清理

 

在并发标记和重新标记中,插入两个阶段:预清理和并发可中断预清理。

为什么能够插入?

并发标记不暂停(STW),我们要尽量缩短STW时间(重新标记时间),因此在并发阶段做的事情越多越好。

预清理控制参数:CMSPreClieaningEnabled  CMS默认开启的。

2.5.1 预清理

1)如果新生代创建的对象A,在老年代存在跨代引用没有标记的对象B,那么B需要修改为存活状态。

2)老年代应用对象发生变化,需要标记为dirty,进行重新标记。记录类似与卡表的结构。

2.5.2 并发可中断预清理

控制参数 CMSScheduleRemarkEdenSizeThreshold 2M,Eden区存活对象达到2M。

并发标记阶段,如果From区和To区的引用对象发生跨代引用。老年代应用对象发生变化,需要标记为dirty,进行重新标记。

可中断。中断条件:

 

相关文章:

JVM垃圾收集器和性能调优

目标: 1.JVM垃圾收集器有哪几种? 2.CMS垃圾收集器回收步骤。 一、JVM常见的垃圾回收器 为什么垃圾回收的时候需要STW? 标记垃圾的时候,如果不STW,可能用户线程就会不停的产生垃圾。 1.1 单线程收集 Serial和SerialOld使用单…...

汽车EDI——Volvo EDI 项目案例

项目背景 作为Volvo的长期合作伙伴,C公司收到Volvo的EDI对接邀请,需要实现EDI对接。C公司将会面临哪些挑战?又应该相应地选择何种EDI解决方案呢? 汽车行业强调供需双方的高效协同(比如研发设计、生产计划、物流信息等…...

Qt应用程序发布

一、静态编译发布 1.0:以Release模式构建工程 1.1:查看当前构建生成路径,并将所生成的.exe单独拷贝出来 1.2:将可执行文件*.exe拷贝至任一目标文件夹:D:\Temporary\QQIF 2:查看安装Qt时发布工具windeployqt.exe所在的目录 windeployqt.exe在Qt开发套件的bin目录下。Qt的每…...

Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库

Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库 目录 Python 机器学习 基础 之 【常用机器学习库】 NumPy 数值计算库...

Linux Kernel nf_tables 本地权限提升漏洞(CVE-2024-1086)

文章目录 前言声明一、netfilter介绍二、漏洞成因三、漏洞危害四、影响范围五、漏洞复现六、修复方案临时解决方案升级修复方案 前言 2024年1月,各Linux发行版官方发布漏洞公告,修复了一个 netfilter:nf_tables 模块中的释放后重用漏洞(CVE-…...

[word] word如何清除超链接 #媒体#笔记#知识分享

word如何清除超链接 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享下word如何清除超链接的操作办法,一起来学习下吧! 1、清除所有超链接 按下组合键CtrlshiftF9,就可以将网上复制带有超链…...

【Linux】进程(9):进程控制1

大家好,我是苏貝,本篇博客带大家了解Linux进程(9)进程控制1,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1 fork函数2 进程终止(A)终止是…...

华为RH2288H V3服务器iBMC的SSL证书续期

本文对华为RH2288H V3服务器iBMC的SSL证书续期,以避名登录告警提示及主机状态异常。 一、检查现网服务器iBMC的SSL证书到期时间 登录iBMC,点击配置--SSL证书,如下: 可以看到本服务器SSL证书将于今年7月22日到期。 二、联系厂家…...

ubuntu开机黑屏

BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.1) built-in shell (ash) Enter help for a list of built-in commands. 解决: help 看看哪个盘出问题了 fsck -y /dev/sda1 (出问题的磁盘/分区) reboot 就可以进入系统了 fsck命令&#xf…...

【risc-v】arm和riscv有什么关系或者联系?

ARM和RISC-V都是基于精简指令集计算(RISC)原理的处理器架构,它们在设计理念上有一定的联系,但同时存在一些关键的区别: 设计理念:ARM和RISC-V都采用了RISC的核心设计原则,即通过简化指令集来提高…...

Flutter项目开发模版,开箱即用

前言 当前案例 Flutter SDK版本:3.22.2 每当我们开始一个新项目,都会 引入常用库、封装工具类,配置环境等等,我参考了一些文档,将这些内容整合、简单修改、二次封装,得到了一个开箱即用的Flutter开发模版…...

私有仓库搭建

目前市面上比较常见的私有仓库搭建方法为: 通过 Sinopia 或 verdaccio 搭建(Sinopia 已经停止维护,verdaccio 是 Fork 自 Sinopia,基本上大同小异),其优点是搭建简单,不需要其他服务。通过 cnp…...

axios设置 responseType为 “stream“流式获取后端数据

使用前景: 工作过程中遇到了后端接口响应过慢,前端界面一致loading的情况,这个时候可以尝试采用将Axios的responseType参数被设置为stream类型实现。 stream介绍: stream类型意味着你希望服务器响应的数据以Node.js流&#xff…...

Apache POI(使用Java读写Excel表格数据)

1.Apache POI简介 Apache POI是一个开源的Java库,用于操作Microsoft Office格式的文件。它支持各种Office文档的读写功能,包括Word文档、Excel电子表格、PowerPoint演示文稿、Outlook电子邮件等。Apache POI提供了一组API,使得Java开发者能够…...

golang中只用定义不用初始化的类型规律总结

在go语言的开发中,有很多的内置类型是我们只需要定义而不需要初始化的, 如上文中提到的bytes.Buffer, strings.Builder。 其实在go语言中官方给我们定义的很多的类型都只需要定义,不需要初始化。 他们都有2个共同的规律&#xff…...

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议,这个协议基本和MIT开源协议一样,说人话,就是你可以对PostgreSQL进行一些封装&a…...

找出链表倒数第k个元素-链表题

LCR 140. 训练计划 II - 力扣(LeetCode) 快慢指针。快指针臂慢指针快cnt个元素到最后; class Solution { public:ListNode* trainingPlan(ListNode* head, int cnt) {struct ListNode* quick head;struct ListNode* slow head;for(int i …...

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…...

【Unity】资源管理与热更 YooAsset+HybridCLR

1 前言 Unity资源管理与热更新该用什么方法?当然是YooAssetHybridCLR了,YooAsset负责资源管理与热更,HybridCLR负责支持代码热更。 但这里我就不自己讲了,我会提供相关学习链接(前人栽树我躺平)。 2 学习链…...

PDF批量加水印 与 去除水印实践

本文主要目标是尝试去除水印,但是为了准备测试数据,我们需要先准备好有水印的pdf测试文件。 注意:本文的去水印只针对文字悬浮图片悬浮两种特殊情况,即使是这两种情况也不代表一定都可以去除水印。 文章目录 批量添加透明图片水印…...

工作进度管理工具有哪些?8款项目协作平台测评分享

本文将深入对比8款工作任务进度管理软件:Worktile、PingCode、Jira Confluence、Asana、monday.com、ClickUp、Trello、Microsoft Planner / Project。一、工作任务进度管理软件怎么选很多企业刚开始选任务管理软件时,容易只看两个点:能不能…...

离散流匹配与MaskFlow框架:视频生成技术解析

1. 离散流匹配在视频生成中的技术演进 视频生成技术近年来取得了显著进展,但长视频生成仍然面临两大核心挑战:一是如何有效建模视频中复杂的时空动态关系,二是如何在有限的计算资源下实现高效生成。传统方法通常采用固定长度的训练序列&…...

如何选择AI写论文工具?

本科生、研究生写论文常陷文献难找、逻辑混乱、查重超标、AI幻觉等困境,盲目用AI工具还易触碰学术诚信红线。本文结合学术规范、查重要求、功能适配与数据安全,实测AI论文工具,帮你精准选对合规高效的写作助手。一、先守学术合规底线&#xf…...

用o1-preview构建端到端水质分类系统

1. 项目概述:用 o1-preview 构建端到端水质分类系统的真实复现手记 我做机器学习项目快十年了,从最早手动调参、写 Makefile 编译模型,到后来用 MLflow 跟踪实验、用 Flask 封装 API,再到如今用 Docker 打包上云——整个流程早已刻…...

稀疏结式与动作矩阵:视觉几何求解器中的等价性证明

1. 项目概述:从视觉几何到代数求解的桥梁 在计算机视觉领域,尤其是三维重建、相机标定、姿态估计这些核心任务中,我们常常会遇到一个看似简单、实则棘手的问题:求解一个由多个多项式方程构成的方程组。比如,从两幅图像…...

UniversalUnityDemosaics:Unity游戏马赛克去除全攻略

UniversalUnityDemosaics:Unity游戏马赛克去除全攻略 【免费下载链接】UniversalUnityDemosaics A collection of universal demosaic BepInEx plugins for games made in Unity3D engine 项目地址: https://gitcode.com/gh_mirrors/un/UniversalUnityDemosaics …...

软件测试行业的结构性变化:外包测试正在消失,高端测试供不应求

一个正在被重新定义的职业 如果你是一位在软件测试领域工作了三到五年的从业者,大概率会在某个加班的深夜产生过这样的困惑:为什么招聘网站上“功能测试工程师”的岗位越来越少,薪资也停滞不前?为什么同事群里讨论的不再是如何设…...

高效自动化安装:Windows平台ADB与Fastboot驱动完整配置指南

高效自动化安装:Windows平台ADB与Fastboot驱动完整配置指南 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitcode.com/gh_mirrors/…...

Network-AI:解决多智能体协作竞态与状态冲突的协调层

1. 项目概述:Network-AI,一个解决多智能体“内讧”的协调器如果你正在用LangChain、CrewAI或者AutoGen构建AI智能体应用,大概率遇到过这样的场景:你部署了两个智能体,一个负责分析数据,一个负责生成报告。它…...

如何在Windows上轻松安装APK文件?APK Installer完整指南

如何在Windows上轻松安装APK文件?APK Installer完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows上安装安卓应用而烦恼吗?…...