JVM垃圾回收参数、元空间相关参数

垃圾回收调优的参数

参数作用默认
-XX:NewRatio=n老年代:新生代内存大小比值2
-XX:SurvivorRatio=n伊甸园:survivor区内存大小比值8
-XX:PretenureSizeThreshold=n对象大小超过该值就在老年代分配,0表示不做限制0
-Xms需要最小的堆-
-Xmx最大堆-
-Xmn新生代大小-
-XX:+DisableExplicitGC忽略掉System.gc()的调用启用
-XX:NewSize=n新生代初始内存大小-
-XX:MaxNewSize=n新生代最大内存-

G1收集器-减少Full GC的思路

增加预留内存(增大-XX:G1ReservePercent,默认为堆的10%)
更早的回收垃圾(减少-XX:InitiatingHeapOccupancyPercent 老年代达到该值会触发MixedGC,默认45%)
增加并发阶段使用的线程数(增大-XX:ConcGCThreads)

G1 or CMS?

对于JDK8:都可以用
如果内存<= 6G,建议使用cms,如果内存>6G考虑使用G1
如果>JDK8:用G1
cms从JDK9已经被废弃了

垃圾收集器相关JVM参数总结

如何选择垃圾收集器?

基于JDK1.8整理

收集器参数及默认值说明
Serial-XX:+UserSerialGC虚拟机在Client模式下的默认值,开启后,使用Serial+Serial Old的组合
ParNew-XX:UseParNewGC开启后,使用ParNew + Serial Old的组合
-XX:ParallelGCThreads=n设置垃圾收集器在并行阶段使用的垃圾收集线程数,当逻辑处理器数量小于8时,n的值于逻辑处理器数量相同;如果逻辑处理器数量大于8个,则n的值大约为逻辑处理器数量5/8,大多数情况下是这样,除了较大的SPARC系统,其中n的值约为逻辑处理器的5/16.
Parallel Scavenge-XX:+UseParallelGC虚拟机在Server默认下的默认值,开启后,使用Parallel Scavenge + Serial Old组合。
-XX:MaxGCPauseMillis=n收集器尽可能保证单次内存回收的停顿时间不超过这个值
-XX:GCTimeRatio=n设置吞吐量的大小,取值范围0-100,假设GCTimeRatio 的值为n,那么系统将花费不超过1/(1+n)的时间用于垃圾收集
-XX:+UseAdaptiveSizePolicy开启后,无需人工指定新生代的大小(-Xmn)、Eden和Survisor的比例(-XX:SurvivorRatio)以及晋升老年代对象的年龄(-XX:PretenureSizeThreshold) 等参数,收集器会根据当前系统的运行情况自动调整
Serial OldSerial Old时Serial的老年代版本,主要用于Client模式下的老年代收集,同时也是CMS在发生Concurrent Mode Failure时的后备方案
Parallel Old-XX:UseParallelOldGC开启后,使用Parallel Scavenge + Parallel Old的组合,Parallel Old是Parallel Scavenge的老年代版本,在注重吞吐量和cpu资源敏感的场合,可以优先考虑这个组合
CMS-XX:+UseConcMarkSweepGC开启后,使用ParNew + CMS的组合;Serial Old 收集器将作为CMS收集器出现Concurrent Mode Failure失败后的后备收集器使用
-XX:CMSInitiatingOccupancyFraction=68CMS收集器在老年代空间被使用多少后触发垃圾收集,默认68%
-XX:+UseCMSCompactAtFullCollection在完成垃圾收集后是否要进行一次碎片整理,默认开启
-XX:CMSFullGCsBeforeCompaction=0在进行若干次Full GC 后就进行一次碎片整理,默认0
-XX:+UseCMSInitiatingOccupancyOnly允许使用占用值作为启动CMS收集器的唯一标准,一般和CMSFullGCsBeforeCompaction配合使用。如果开启,那么当CMSFullGCsBeforeCompaction达到阈值就开始GC,如果关闭,那么JVM仅在第一次使用CMSFullGCsBeforeCompaction的值,后续则自动调整,默认关闭
-XX:+CMSParallelRemarkEnabled重新标记阶段并行执行,使用此参数可降低标记停顿,默认打开(仅适用于ParNewGC)
-XX:+CMSScavengeBeforeRemark开启或关闭在CMS重新标记阶段之前的清除(YGC)尝试。新生代里一部分对象会作为GC Roots,让CMS在重新标记之前,做一次YGC,而YGC能够回收掉新生代里大多数对象,这样就可以减少GC Roots的开销。因此,打开此开关,可在一定程度上降低CMS重新标记阶段的扫描时间,当然,开启此开关后,YGC也会消耗一些时间。PS,开启此开关并不保证在标记阶段前一定会进行清除操作,生产坏境建议开启,默认关闭。
CMS-Precleaning-XX:CMSPrecleaningEnabled是否启用并发预清理,默认开启
CMS-AbortablePreclean-XX:CMSScheduleRemarkEdenSizeThreshold=2M如果伊甸园的内存使用超过该值,才可能进入“并大可中止的预清理”这个阶段
CMS-AbortablePreclean-XX:CMSMaxAbortablePrecleanLoops=0"并发可终止的预清理阶段"的循环次数,默认0,表示不做限制
CMS-AbortablePreclean-XX:+CMSMaxAbortablePrecleanTime=5000“并发可终止的预清理”阶段持续的最大时间
-XX:+CMSClassUnloadingEnabled使用CMS时,是否启用类卸载,默认开启
-XX:+ExplicitGCInvokesConcurrent显示调用System.gc()会触发Full GC,会有Stop the World,开启此参数后,可让System.gc()触发的垃圾回收变成一次普通的CMS GC
-XX:UseG1GC使用G1 收集器
-XX:G1HeapRegionSize=n设置每个region的大小,该值为2的幂,范围为1MB到32MB,如不确定G1会根据堆的大小自动决定
-XX:MaxGCPauseMillis=200设置最大停顿时间,默认值为200毫秒
-XX:G1NewSizePercent=5设置年轻代占整个堆的最小百分比,默认值是5,这个是实验参数,需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数
-XX:G1MaxNewSizePercent=60设置年轻代占整个堆的最大百分比,默认值是60,这个是实验参数。需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数
-XX:ParallelGCThreads=n设置垃圾收集器在并行阶段使用的垃圾收集线程数,当逻辑处理器数量小于8时,n的值与逻辑处理器数量相同;如果逻辑处理器数量大于8个,则n的值大约为逻辑处理器数量的5/8,大多数情况下是这样,除了较大的SPARC系统,其中n的值约为逻辑处理器的5/16
-XX:ConcGCThreads=n设置垃圾收集器并发阶段使用的线程数量,设置n大约为ParallelGCThreads的1/4
-XX:InitiatingHeapOccupancyPercent=45老年代大小达到该阈值,就触发Mixed GC,默认值为45
-XX:G1MixedGCLiveThresholdPercent=85Region中的对象,活跃度低于该阈值,才可能被包含在Mixed GC收集周期中,默认值为85,这是个实验参数。需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数
-XX:G1HeapWastePercent=5设置浪费的堆内存百分比,当可可回收百分比小于浪费百分比时,JVM就不会启动混合垃圾回收,从而避免昂贵的GC开销,此参数相当于用来设置允许垃圾对象占用内存的最大百分比
-XX:G1MixedGCCountTarget=8设置在标记周期完成之后,最多执行多少次Mixed GC,默认值为8.
-XX:G1OldCSetRegionThresholdPercent=10设置在一次Mixed GC 中被收集的老年代的比例上限,默认值是Java堆的10%,这是个实验参数。需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数
-XX:G1ReservePercent=10设置预留空闲内存百分比,虚拟机会保证Java堆有这么多空间可用,从而防止对象晋升时无空间可用而失败,默认值为Java堆的10%
-XX:-G1PrintHeapRegions输出Region被分配和回收的信息,默认是false
-XX:-G1PrintRegionLivenessInfo在清理阶段的并发标记环节,输出堆中的所有Regions的活跃信息,默认false
Shenandoah-XX:+UseShenandoahGC使用UseShenandoahGC,这是个实验参数。需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数;另外该参数只能在Open JDK中使用,Oracle JDK无法使用
ZGC-XX:+UseZGC使用ZGC,这是个实验参数。需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数
Epsilon-XX:+UseEpsilonGC使用UseEpsilonGC,这是个实验参数。需用-XX:+UnlockExperimentalVMOptions解锁试验参数后,才能使用该参数

元空间相关参数

属性作用默认值
-XX:MetaspaceSize元空间的初始值,元空间占用达到该值就会触发垃圾收集,进行类型卸载,同时,收集器会自动调整该值。如果能够释放空间,就会自动降低该值;如果释放空间很少,那么在不超过-XX:MaxMetaspaceSize的情况下,可适当提高该值21810376字节
-XX:MaxMetaspaceSize元空间最大值受限于本地内存大小
-XX:MinMetaspaceFreeRatio垃圾收集后,计算当前元空间的空闲百分比,如果小于该值,就增加元空间大小40%
-XX:MaxmetaspaceFreeRatio垃圾收集后,计算当前元空间的空闲百分比,如果大于该值,就减少元空间的大小70%
-XX:MinMetaspaceExpansion元空间增长时间的最小幅度340784字节
-XX:MaxMetaspaceExpansion元空间增长时间的最大幅度5452592字节
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值