一、JVM通用配置参数
1、JVM内存配置
参数名称 | 参数说明 |
---|
-Xms | 初始堆内存大小 |
-Xmx | 最大堆内存大小 |
-Xmn | 新生代内存大小 |
-XX:MetaspaceSize | 初始元空间大小 |
-XX:MaxMetaspaceSize | 最大元空间大小 |
-XX:MaxDirectMemorySize | 最大直接内存大小,默认值为-Xmx大小 |
-XX:NewRatio=2 | 设置老年代和新生代内存占比,默认值为2:1。 |
-XX:SurvivorRatio=8 | 设置Eden区和Survivor区的比例,默认值为8:1:1(Eden:From:To)。 |
2、JVM其他通用配置
参数名称 | 参数说明 |
---|
-XX:StringTableSize | 设置字符串常量池大小,数值越大,存入字符串时Hash冲突概率越小。JDK1.6默认为1009,JDK1.7之后默认为60013,JDK1.8开始最小值为1009 |
-XX:MaxTenuringThreshold=15 | 设置新生代对象经历多少次GC后晋升老年代,默认值为15 |
-XX:DisableExplicitGC | 禁用显式垃圾回收(System.gc()) |
-XX:+ClassUnloadingwithConcurrentMark | Since JDK 8u40,当一个类加载器的所有类都不再使用,则卸载它所加载的所有类,默认启用 |
-XX:+PrintCommandLineFlags | 打印JVM的命令行参数 |
-XX:PrintGCDetails | 打印GC详细信息 |
-XX:+PrintGCDateStamps | 打印GC时的日期时间 |
-XX:+PrintGCApplicationStoppedTime | 打印GC时应用程序的暂停时间 |
-XX:+PrintHeapAtGC | GC前先打印堆内存信息 |
-XX:+PrintTenuringDistribution | 打印新生代对象的晋升信息 |
-XX:+HeapDumpOnOutOfMemoryError | 出现内存溢出错误时导出堆内存快照 |
-Xloggc:/var/gc.log | 配置GC日志文件的存放位置 |
-XX:ErrorFile=/var/hs_err_pid%p.log | 配置JVM错误日志的存放位置 |
-XX:HeapDumpPath=/temp | 配置堆内存快照文件的存放路径 |
二、JVM垃圾收集器配置
1、Serial串行垃圾收集器配置参数
参数名称 | 参数说明 |
---|
-XX:+UseSerialGC | 启用串行垃圾回收器 |
2、Parallel并行(吞吐量)垃圾收集器配置参数
参数名称 | 参数说明 |
---|
-XX:+UseParallelGC | 启用并行(吞吐量)垃圾收集器 |
-XX:MaxGCPauseMillis=200ms | 设置最大暂停时间目标,默认情况下,没有最大暂停时间目标。 |
-XX:GCTimeRatio=19 | 设置吞吐量目标,一般将目标设置为垃圾回收总时间的 1/20 或 5%。默认值为 99,因此垃圾回收中的目标时间为 1%。(JVM会优先满足最大暂停时间目标,其次才会满足吞吐量目标,最后再考虑最小化堆内存占用大小) |
-XX:+UseAdaptiveSizePolicy | 动态调整新生代各区域的大小和存活对象晋升阈值 |
3、CMS垃圾收集器配置参数
参数名称 | 参数说明 |
---|
-XX:+UseConcMarkSweepGC | 启用CMS并发垃圾收集器 |
-XX:+UseParNewGC | 启用ParNew垃圾收集器(一般和CMS配套使用,启用CMS垃圾收集器后会默认启用该配置) |
-XX:+CMSScavengeBeforeRemark | 设置标记前先在新生代进行一次垃圾回收 |
-XX:+CMSParallelRemarkEnabled | 开启多线程执行重新标记 |
-XX:+CMSParallelInitialMarkEnabled | 开启多线程执行初始标记 |
-XX:+UseCMSCompactAtFullCollection | Full GC之后整理内存碎片 |
-XX:CMSInitiatingOccupancyFraction=65 | 设置触发垃圾回收时的堆内存占比,默认值65 |
-XX:ConcGCThreads=threads | 设置并发标记时的GC线程数 |
-XX:CMSFullGCsBeforeCompaction=0 | 设置经过多少次Full GC后进行空间碎片整理,默认值为0 |
4、G1垃圾收集器配置参数
参数名称 | 参数说明 |
---|
-XX:+UseG1GC | 启用G1垃圾收集器 |
-XX:G1HeapRegionSize=size | 设置 G1 区域的大小。该值将是 2 的幂,范围从 1 MB 到 32 MB。目标是基于最小的 Java 堆大小划分为大约 2048 个区域。 |
-XX:MaxGCPauseMillis=200 | 设置最大暂停时间目标值,默认值为 200 毫秒。 |
-XX:ParallelGCThreads=n | 设置STW时的GC线程数,最大值为8。 |
-XX:ConcGCThreads=n | 设置并发标记时的GC线程数 |
-XX:InitiatingHeapoccupancyPercent=45 | 设置触发标记的 Java 堆占用阈值,默认值是整个 Java 堆的 45%。 |
-XX:+UseStringDeduplication | Since JDK 8u20,开启字符串去重,当新生代回收时,G1并发检查是否有字符串重复,如果它们值一样,让它们引用同一个char[]。 |
-XX:G1MixedGCCountTarget=8 | 设置混合垃圾回收次数,当触发混合垃圾回收时,将按此配置进行分批回收,默认值为8 |
-XX:G1HeapWastePercent=5 | 设置允许浪费的堆内存百分比。当可回收内存百分比小于堆可浪费百分比时,Java HotSpot VM 不会再进行混合垃圾回收,默认值为 5%。 |
-XX:G1OldCSetRegionThresholdPercent=10 | 设置混合垃圾回收要收集的最大老年代Region数。默认值为 Java 堆的 10%。 |
-XX:G1ReservePercent=10 | 设置保持可用内存的百分比,以降低空间溢出的风险。默认值为 10%。 |
三、JVM参数配置示例
1、CMS垃圾收集器配置示例
8G内存服务器:
JAVA_OPTS="-Xms5G -Xmx5G -Xmn1G -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:ErrorFile=/var/log/hs_err_pid%p.log -Xloggc:/var/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags -XX:+PrintGCApplicationStoppedTime -XX:HeapDumpPath=/temp -XX:+HeapDumpOnOutOfMemoryError"
2、G1垃圾收集器配置示例
16G内存服务器:
JAVA_OPTS="-Xms10G -Xmx10G -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ErrorFile=/var/log/hs_err_pid%p.log -Xloggc:/var/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags -XX:+PrintGCApplicationStoppedTime -XX:HeapDumpPath=/temp -XX:+HeapDumpOnOutOfMemoryError"