06-GC参数汇总

JVM参数

一、参数说明

java启动参数共分为三类

  • 第一类是标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
  • 第二类是非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
  • 第三类是非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

二、内存相关

JVM参数名称参数功能配置示例默认值注意事项
-Xmx堆内存最大值-Xmx2g
-Xms初始堆大小-Xms2g1/64 RAM建议与-Xmx一致避免堆内存扩缩抖动
-Xmn年轻代内存大小(Eden+2*survivor )-Xmn256m整堆=年轻代 + 年老代 +永久代,使用G1收集器不建议设置该值
-Xss线程栈大小-Xss256k-Xss1MJDK5.0 后默认1M
-XX:SurvivorRatio年轻代中Eden与Survivor的比值-XX:SurvivorRatio=8默认值为8Survivor默认占年轻代1/10,Eden默认占8/10
-XX:MetaspaceSize初始元空间大小-XX:MetaspaceSize=512M20MJDK8
-XX:MaxMetaspaceSize=512M最大元空间大小-XX:MaxMetaspaceSize=512M无限制JDK8
-XX:MaxDirectMemorySize最大堆外内存大小-XX:MaxDirectMemorySize=40M默认和Xmx相等JDK8
-XX:PermSize永久代初始大小-XX:PermSize=256m1/64 RAMJDK7
-XX:MaxPermSize永久代最大值-XX:MaxPermSize=256m1/4 RAMJDK7

在这里插入图片描述

三、GC收集器相关

  • java -XX:+PrintCommandLineFlags -version : 查看使用什么垃圾收集器
JVM参数名称参数功能注意事项
-XX:+UseSerialGC在新生代和老年代中使用串行器
-XX:+UseParNewGC在新生代使用并行收集器新生代并行,老年代串行,使用 -XX:ParallelGCThreads 限制线程数量
-XX:+UseParallelOldGC老年代使用并行回收收集器
-XX:GCTimeRatio设置吞吐量大小,(0,100)假设GCTimeRatio的值为N,那么系统将花费不超过1/(1+n)的时间用于垃圾收集
-XX:UseAdaptiveSizePolicy打开自适应GC策略该模式下,新生代的大小,eden和survivior的比例,晋升老年代的年龄等参数会自动调整,以达到在堆大小,吞吐量和停顿时间之间的平衡点

CMS/G1通用参数

JVM参数名称参数功能配置示例默认值注意事项
-XX:MaxTenuringThreshold=15GC晋升年龄阈值-XX:MaxTenuringThreshold=15缺省默认值为15
-XX:PretenureSizeThreshold=1M直接在老年代分片的大小阈值-XX:PretenureSizeThreshold=1M默认0默认表示所有对象都先在年轻代(Eden)分片
-XX:+DisableExplicitGC忽略手动调用GC, System.gc()的调用就会变成一个空调用,不触发GC-XX:+DisableExplicitGC不建议设置,部分框架(比如Netty)会通过该参数触发FullGC清理堆外内存
-XX:+ParallelRefProcEnabled开启尽可能并行处理Reference对象-XX:+ParallelRefProcEnabled建议开启
-XX:ParallelGCThreads并行垃圾收集器在 STW 期间GC线程数-XX:ParallelGCThreads=10STW 期间GC线程数
-XX:ConcGCThreads垃圾收集器在应用线程并发执行标记处理(非STW阶段)时的线程数-XX:ConcGCThreads=10非STW 期间GC线程数

CMS重要参数

JVM参数名称参数功能默认值注意事项
-XX:+UseConcMarkSweepGC使用 CMS (并发标记清除)收集器
-XX:CMSInitiatingOccupancyFraction老年代触发CMS GC的内存使用阈值比率68范围1~100需要和UseCMSInitiatingOccupancyOnly一起使用才生效
-XX:UseCMSCompactAtFullCollectionCMS清理垃圾后进行一次内存整理默认开启过程无法并发,清理了空间碎片但停顿时间会变长
-XX:CMSFullGCsBeforeCompaction在几次CMS垃圾收集后,触发一次内存整理默认值为0(推荐)默认每次CMS过后都进行空间整理
-XX:+UseCMSInitiatingOccupancyOnly设置CMS 按照CMSInitiatingOccupancyFraction参数阈值触发CMS GCfalsefalse时JVM仅在第一次使用设定值,后续则自动调整,建议设置
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses保证调用System.gc()触发的是一个并发GC,而不是Full GC建议开启
-XX:+CMSClassUnloadingEnabledCMS GC时触发类卸载推荐开启
-XX:+CMSScavengeBeforeRemark在CMS第三阶段(重新标记阶段)之前执行年轻代Young GC,可相当部分的需要标记的对象,减少CMS重新标记的开销(会STW)建议开启
-XX:ParallelCMSThreads设定CMS的线程数量
-XX:+CMSParallelRemarkEnabledCMS第三阶段(重新标记阶段)会STW,启用并行标记,可以降低停顿,减少暂停时间,如果还是很长,可以开启CMSScavengeBeforeRemark

G1 重要参数

JVM参数名称参数功能默认值注意事项
-XX:+UseG1GC使用G1
-XX:MaxGCPauseMillis=200期望达到的最大GC停顿时间指标JVM会尽力实现,但不保证达到
-XX:G1HeapRegionSize=2M设置G1 Region区域大小当G1因为频繁分配巨型对象失败导致Full GC,可以尝试增大该参数
-XX:InitiatingHeapOccupancyPercent=45启动并发GC周期时的堆内存占用百分比45G1是基于整个堆的使用率触发并发GC周期,而不只是年轻代或老年代的内存的使用比, 0 表示一直执行GC循环
-XX:G1ReservePercent=10预留内存占堆内存比值默认10默认值表示使用10%的堆内存为预留内存,当Survivor区域不足以容纳新晋升对象时会尝试使用预留内存

四、日志输出相关

JVM参数名称参数功能注意事项
-Xloggc指定GC日志文件的输出路径…/log/gc.log
-verbose:gc开启输出JVM GC日志-verbose:gc
-verbose:class查看类加载信息明细-verbose:class
-XX:+PrintGC输出GC日志-XX:+PrintGC
-XX:+PrintGCDetails输出GC详细日志-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps输出GC的时间戳(以基准时间的形式)-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC在进行GC的前后打印出堆的信息
-XX:+PrintGCApplicationStoppedTime输出GC造成应用暂停的时间-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime输出GC之间运行了多少时间-XX:+PrintGCApplicationConcurrentTime
-XX:+HeapDumpOnOutOfMemoryError表示当JVM发生OOM时,自动生成DUMP文件未指定目录时,JVM 会创建一个名称为 java_pidPID.hprof 的堆 dump 文件在JVM的工作目录下
-XX:HeapDumpPath=D:/data/log指定OOM时堆内存转储快照位置也可以指定文件名称,如果不指定文件名,默认为:java_
-XX:+PrintTenuringDistribution打印MinorGC 各个Age的对象分布
-XX:+PrintTLAB打印TLAB(线程本地分配缓存区)空间使用情况
-XX:+PrintClassHistogramBeforeFullGCFull GC前后打印跟踪类视图
-XX:+PrintClassHistogramAfterFullGCFull GC前后打印跟踪类视图

五、其他

5.1 类加载相关

JVM参数名称参数功能配置示例默认值注意事项
-Xnoclassgc禁用类的垃圾回收,性能会高一点

5.2 TLAB相关

JVM参数名称参数功能注意事项
-XX:+UseTLAB开启TLAB分配
-XX:+PrintTLAB打印TLAB相关分配信息
-XX:TLABSize设置TLAB大小
-XX:+ResizeTLAB自动调整TLAB大小

5.3 其他

JVM参数名称参数功能配置示例默认值注意事项
-server服务器模式

5.4 小问题

  • 如何查看使用哪一种垃圾收集器
java -XX:+PrintCommandLineFlags -version : 查看默认设置收集器类型
-XX:+PrintGCDetails: 通过打印的GC日志的新生代、老年代名称判断

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值