1. 内存
堆内存
-Xms
:最小堆内存,也可以使用-XX:InitialHeapSize=2048m
-Xmx
:对大堆内存,也可以使用-XX:MaxHeapSize=2048m
- eg:
-Xms2G -Xmx5G
新生代
-Xmn
:新生代的最大值,也可以使用-XX:MaxNewSize=512m
-XX:NewSize=256m
:新生代的最小内存- -
XX:NewRatio=1
:新生代与老年代的比值,1 就是1:1
,默认是1:2
-XX:SurvivorRatio=6
:Eden 区和 Survivor 区的比值,6 就是6:1:1
永久代(1.7)
-XX:PermSize=128m
:永久代初始大小-XX:MaxPermSize=256m
:永久代最大值
元空间(1.8)
-XX:MetaspaceSize=128m
:初始大小-XX:MaxMetaspaceSize=256m
:最大值
其它
-Xss256k
:线程栈的最大值,也可以使用-XX:ThreadStackSize=256k
-XX:MaxDirectMemorySize=256m
:最大直接内存大小
2. GC
-XX:PretenureSizeThreshold=1000000
:大于这个值的对象是大对象,内存直接分配在老年代-XX:MaxTenuringThreshold=10
:年轻代的最大年龄-XX:+UseParNewGC
:年轻代使用 ParNew 收集器,-XX:-UseParNewGC
-XX:+UseParallelGC
:年轻代使用 Parallel Scavenge 收集器,-XX:-UseParallelGC
-XX:+UseParallelOldGC
:老年代使用 Parallel Old 收集器,-XX:-UseParallelOldGC
-XX:+UseConcMarkSweepGC
:老年代使用 CMS 收集器,如果出现Concurrent Mode Failure
会使用 Serial Old 收集器,新生代会使用 ParNew-XX:+UseG1GC
:使用 G1 收集器-XX:ParallelGCThreads=16
:并行执行 GC 的线程数-XX:+CMSInitiatingOccupancyFraction=75
:老年代占用超过这个比例就会触发 FULL GC,太高会导致Concurrent Mode Failure
-XX:+UseCMSInitiatingOccupancyOnly
:只使用上面设置的百分比,如果不设置,JVM 只会在第一次使用上面设置的值,之后就会动态调整-XX:-UseCMSCompactAtFullCollection
:设置在 CMS GC 之后是否需要做一次内存整理,默认开启-XX:CMSFullGCsBeforeCompaction=1
:设置 CMS 多少次 FULL GC 之后才做内存整理-XX:MaxGCPauseMillis=200
:设置 G1 FULL GC 的最大 STW 时间-XX:+DisableExplicitGC
:不允许System.gc()
触发 FULL GC
3. 日志
-Xloggc:/data/gc-%t.log
:GC 文件的日志地址,%t
是时间戳-XX:+UseGCLogFileRotation
:满了之后滚动,会覆写日志文件,不推荐使用-XX:NumberOfGCLogFiles=4
:触发滚动的最大文件数-XX:+PrintGCDetails
:GC 时打印更多 GC 信息-XX:+PrintGCDateStamps
:GC 时打印时间戳信息-XX:+PrintTenuringDistribution
:打印 Survivor 里有用的对象的年龄信息-XX:+PrintHeapAtGC
:打印 GC 前后堆的信息