随笔 - 178  文章 - 2  评论 - 0  阅读 - 99381

gc参数与算法

-XX:SurvivorRatio 设置eden区大小和survivor区大小的比例
-XX:NewRatio 新生代和老年代的比

引用计数:Java未使用
复制:新生代使用
标记-清理:老年代使用
标记-压缩

收集器:
串行收集器:-XX:+UseSerialGC 最古老、最稳定,效率高,收集垃圾时只执行GC线程,可能会出现较长时间的停顿 复制算法
并行收集器:-XX:+ParNewGC 新生代并行,老年代串行 -XX:ParallelGCThreads 限制线程数量 复制算法
Parallel收集器:类似ParNew,新生代复制算法,老年代标记-压缩,更加关注吞吐量,  -XX:UseParallelGC,老年代串行  -XX:UseParallelOldGC,老年代并行
CMS收集器:Concurrent Mark Sweep 并发(gc线程与用户线程一起执行)标记清除,并发阶段会降低吞吐量,老年代收集器(新生代使用ParNew) -XX:UseConcMarkSweepGC 内存预留不够时,会导致concurrent mode failure,可以使用串行收集器作为后备 -XX:CMSInitiatingOccupancyFraction,设置GC的阈值,堆空间达到设定的阈值,进行回收
CMS收集器:初始标记(根可以直接关联到的对象,速度快)-->并发标记(主要标记过程,标记全部对象)-->重新标记(停止用户进程,进行标记修正)-->并发清除(基于标记结果,直接清理对象)
-XX:+UseCMSCompactAtFullCollection Full GC后,进行一次整理
-XX:+CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理
-XX:ParallelCMSThreads 设定CMS的线程数量
-XX:+CMSClassUnloadingEnabled 允许对类元数据进行回收
-XX:CMSInitiatingPermOccupancyFraction 当永久区占有率达到这一百分比时,启动CMS回收
-XX:UseCMSInitiatingOccupancyOnly 表示只有到达阈值的时候,才进行CMS回收

-XX:MaxGCPauseMills 最大停顿时间,GC尽力保证回收时间不超过设定值
-XX:GCTimeRatio 0-100的取值范围,垃圾收集时间占总时间的比,默认99,即最大允许1%时间做GC
这两个参数是矛盾的,因为停顿时间和吞吐量不可能同时调优

posted on   渐行渐远的那些人  阅读(135)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示