完整教程:降低fullgc停顿时间

news/2025/10/1 14:29:35/文章来源:https://www.cnblogs.com/yxysuanfa/p/19122427

降低 Full GC 的停顿时间是一项系统工程,核心在于​​减少其发生频率​​和​​优化其执行效率​​。为了让你快速把握全貌,下表汇总了主要的优化方向、具体策略和关键考量。

优化维度

核心策略

关键点 / 示例参数

​ 垃圾收集器​

选用低延迟收集器(G1、ZGC)

-XX:+UseG1GC, -XX:MaxGCPauseMillis=200

​ 堆内存管理​

调整大小与比例,减少对象晋升

-Xms4g -Xmx4g, -Xmn2g, -XX:MaxTenuringThreshold=5

​ 监控与诊断​

基于资料定位根本原因

开启GC日志,启用MAT分析堆转储

​⚙️ 系统与代码​

减少对象创建,避免内存泄漏

对象池、及时释放资源、避免大对象

下面我们深入探讨每个方面的具体做法。

选用现代垃圾收集器

对于延迟敏感的应用,从传统的 Parallel Old 或 CMS 收集器切换到现代的低延迟收集器通常是​​最有效​​的一步。

  • ​G1 (Garbage-First) 收集器 (JDK 8+ 推荐)​

    G1 将堆划分为多个大小固定的 Region,通过预测模型,优先回收垃圾最多的 Region(Garbage-First 名称由来),以在给定的时间目标内(由 -XX:MaxGCPauseMillis参数设定,如 200ms)获得最高的收益。

    • ​启用命令​​:-XX:+UseG1GC

    • ​关键参数​​:

      • -XX:MaxGCPauseMillis=200:设置期望的最大停顿时间目标(不保证)。

      • -XX:InitiatingHeapOccupancyPercent=45:设置触发并发标记周期的堆占用阈值(默认45%)。

  • ​ZGC (JDK 11+ 推荐) 与 Shenandoah​

    这两款收集器的目标是实现​​亚毫秒级​​的停顿时间,几乎在所有阶段都能与应用程序线程并发执行,非常适合大堆内存和极低延迟要求的场景(如金融交易系统)。

    • ​启用命令​​:-XX:+UseZGC-XX:+UseShenandoahGC

优化堆内存与分代设置

合理的堆内存配置是降低 Full GC 频率和时长的基础。

  • ​固定堆大小并合理分配​​:将初始堆(-Xms)和最大堆(-Xmx)设置为相同值,可以避免运行时动态调整带来的开销。根据应用特性(对象生命周期)调整新生代(-Xmn)与老年代的比例(-XX:NewRatio)。对于产生大量临时对象的应用,适当增大新生代有助于对象在 Minor GC 时就被回收。

  • ​优化对象晋升策略​让短期存活的对象尽可能在年轻代被回收,避免它们过早进入老年代。就是​:目标

    • 调整 ​​Survivor 区大小​​ (-XX:SurvivorRatio):确保有足够的空间让对象在 Survivor 区之间复制,经历多次 Minor GC。

    • 调整​​晋升年龄阈值​​ (-XX:MaxTenuringThreshold):适当提高此值,让对象在年轻代有更多的“存活”机会。

强化监控与根因诊断

没有数据支撑的调优是盲目的。你必须先知道 Full GC 为何频繁发生、为何停顿时间长,才能对症下药。

  • ​开启详细 GC 日志​​:这是分析的基石。利用以下参数记录GC行为:

    -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log

    然后采用 ​​GCViewer​​、​​gceasy.io​​ 等工具分析日志,重点关注 Full GC 的触发原因(如 Allocation FailureMetadata GC Threshold)、频率和持续时间。

  • ​分析内存泄漏​​:如果发现老年代内存在每次 Full GC 后回收甚少,持续增长,很可能存在内存泄漏。使用 jmap生成堆转储(Heap Dump),然后通过 ​​Eclipse MAT (Memory Analyzer Tool)​​ 或 ​​JProfiler​​ 分析,定位是哪个类的哪些实例占据了大量内存且无法被回收。

⚙️ 代码与系统层面优化

JVM 参数的调整需要与良好的编码实践和系统配置相结合。

  • ​减少对象创建与避免内存泄漏​​:

    • ​减少创建​​:避免在循环内创建大量临时对象,重用对象(使用对象池需权衡),使用 StringBuilder进行字符串拼接。

    • ​及时释放​​:确保数据库连接、文件流等资源在 finally块或使用 try-with-resources 语句中关闭。对于缓存,使用带有大小限制或过期策略的缓存框架(如 Caffeine、Guava Cache),或使用 WeakHashMap等弱引用集合,防止无限制增长。

  • ​系统级优化​​:

    • ​使用 -XX:+AlwaysPreTouch通过​:在 JVM 启动时而非运行时逐页初始化所有内存,能够避免运行时分配内存的延迟,但会延长启动时间。

    • ​减少交换(Swap)​​:通过设置 vm.swappiness=0等措施,尽可能避免操作系统将 JVM 内存页交换到磁盘,否则 GC 时从磁盘换回内存会极大增加停顿时间。

实用调优流程建议

  1. ​确立基线​​:在优化前,先在有代表性的负载下记录当前的性能指标(吞吐量、延迟、GC 停顿)。

  2. ​一次只改一个变量​​:每次只调整一个参数或一个方面,然后观察效果,便于定位问题。

  3. ​循序渐进​​:调优是一个迭代过程。从影响最大的因素开始(通常是更换收集器或调整堆大小),再逐步细化。

  4. ​压力测试​​:所有的调优结果都必须在模拟生产环境的压力测试下进行验证。

希望这份详细的指南能帮助你有效降低应用的 Full GC 停顿时间!如果你能分享更多关于你的应用的具体信息(如 JDK 版本、当前 GC 安装、GC 日志中的关键发现),或许大家允许进行更具体的探讨。

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

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

相关文章

AI+传统工作流:Photoshop/Excel的智能插件开发指南 - 实践

AI+传统工作流:Photoshop/Excel的智能插件开发指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

菜鸟坚持记录-开头篇

这个世界上有两种事:一种是你能掌控的,另一种是你不能掌控的。我们只能做好我们能掌控的事,而对于我们掌控不了的事,不用太关注,也不用太在意。 人生匆匆百年,如梦幻泡影。人活在这个世界上是为了什么?无非是走…

菜鸟坚持记录-开头篇

这个世界上有两种事:一种是你能掌控的,另一种是你不能掌控的。我们只能做好我们能掌控的事,而对于我们掌控不了的事,不用太关注,也不用太在意。 人生匆匆百年,如梦幻泡影。人活在这个世界上是为了什么?无非是走…

淄博网站建设hiddd网站发展历程

题目有39级台阶,每一步只能走1阶或者2阶。如果需要走偶数步,求上台阶的方案数。分析拿到题目就是一通分析,39是奇数,一次走1阶或者两阶。。。那么就有:1*x2y39,x得是个奇数。。。要求走偶数步,那…

Typora 笔记迁移 Obsidian 图片附件库批量移动方法,适用于笔记整理。

解决了Typora 笔记迁移 Obsidian 图片附件库批量移动问题,在ypora 笔记迁移 Obsidian 图片附件库过程中,之前的笔记都是采用的相对路径方法,而现在准备采用`wiki`索引方法,因此得检查不能是否冲突,对文件夹(含子文…

小学网站建设报告闵行网页设计培训学校

概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET…

2025年确有专长培训权威推荐榜:专业资质与特色诊疗口碑之选

2025年确有专长培训权威推荐榜:专业资质与特色诊疗口碑之选 中医药作为我国独特的医疗资源,近年来在政策支持与市场需求的双重推动下蓬勃发展。确有专长医师作为中医药服务体系中的重要组成部分,其专业能力与诊疗水…

开源 C# 快速构建(五)自定义控件--仪表盘

开源 C# 快速构建(五)自定义控件--仪表盘pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

2025中医师承培训、考试、认证机构权威推荐榜:名师传承与临床实践口碑之选

2025中医师承培训、考试、认证机构权威推荐榜:名师传承与临床实践口碑之选 在中医药事业蓬勃发展的今天,中医师承教育作为传统医学传承的重要方式,正受到越来越多从业者的关注与重视。随着国家对中医药传承创新支持…

建设监督网站阜城网站建设代理

1.筛选需求的报告id 基于REAC14Q4文件,筛选出需求报告的id,该文件格式如下,其中pt字段描述了患者在事件中所有的不良信息,注意此处一个报告id可以对应复数条信息。 primaryid$caseid$pt$drug_rec_act 初步统计约有4500种不良反应,总计60W条数…

什么网站做蔬菜生鲜比较好向客户介绍网站建设

一篇word文档,内容有大的章,小的节。如何把章节抽出来生成目录?WORD →点击需要插入的地方 → 插入菜单 → 索引和目录 → 目录 → 确定目录通常是长文档不可缺少的部分,有了目录,用户就能很容易地知道文档中有什么内容…

【Linux系列】让 Vim “跑”起来:建立一个会动的进度条

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网上自己建网站网站建设合同建设方注意事项

来源:国防科技要闻据悉,俄罗斯地面部队已完成“木船”(Kungas)机器人系统样机的国家试验,将于2020年开始部署部队,用于作战试验。发展背景自2010年以来,俄罗斯机器人系统进入快速发展时期。2014…

网站空间商是什么图书馆网络规划与设计

Problem: 354. 俄罗斯套娃信封问题 文章目录 思路解题方法复杂度Code 思路 这个问题可以转换为最长递增子序列(Longest Increasing Subsequence,LIS)问题。先对信封按宽度升序排序,当宽度相同时,按高度降序排序。然后在…

天津建设工程评标专家网站怎么用ps制作个人网站模板下载

31.《危险化学品安全管理条例》所称重大危险源,是指生产、储存、使用或者搬运危险化学品,且危险化学品的数量等于或者超过()的单元(包括场所和设施)。 A.标准 B.一定量 C.临界量 答案:C 32.《危险化学品生产企业安全生产许可证实施办法》…

电子文件分类整理与双向同步 2025年10月1日

电子文件分类整理与双向同步 2025年10月1日一、网上包邮购买 极空间私有云Z4Pro+性能版钛金灰+希捷酷狼Pro16TBx4块二、在极空间Windows电脑客户端设置文件夹实时双向同步任务三、在极空间Windows电脑客户端设置自动挂…

手机wap购物网站模板上海建筑设计院招聘

内网工具对抗 首先,你需要分析: 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次,你需要考虑: 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故…

C++版搜索与图论算法 - 详解

C++版搜索与图论算法 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

达成设计卓越:全面解析 IC 设计中的验证之道

在集成电路(IC)设计流程中,验证(Verification) 是确保设计符合规格、功能正确的关键环节。本文以简洁明快的风格,深入探讨验证的重要性、常用方法与实践经验,帮助设计师构建高效可靠的验证流程。 1、验证的重要…

Typora 笔记迁移 Obsidian 图片链接转换

解决了Typora 笔记迁移 Obsidian 图片链接转换问题,实现了自动化`![Pasted image 20221223164738.png](./Database/Pasted image 20221223164738.png)--![[Pasted image 20221223164738.png]]`附件:Typora 笔记迁移 O…