设置JVM各区域大小
参数 | 含义 | 说明 |
---|---|---|
-XX:InitialHeapSize=100M | 堆初始大小 | 简写:-Xms100M |
-XX:MaxHeapSize=100M | 堆最大大小 | 简写:-Xmx100M |
-XX:NewSize=100M | 年轻代大小 | 简写:-Xmn100M |
-XX:MaxNewSize=size | 年轻代最大大小 | |
-XX:MetaspaceSize=size | 设置方法区大小 | |
-XX:MaxMetaspaceSize=size | 方法区最大大小 | 默认是无限制的 |
-Xss1m | 设置每个线程堆栈大小 | 经验值:3000-5000最佳 |
-XX:OldSize=50M | 设置老年代大小 | |
-XX:NewRatio=ratio | 新生代:老年代=1:ratio | -XX:NewRation=4,新:老=1:4,也就是新生代占1/5。默认1:2 |
-XX:SurvivorRatio=ratio | 两个S区:Eden比值 | -XX:SurvivorRatio=8,表示(s0+s1):Eden=2:8,也就是一个S区占新生代的1/10 |
设置垃圾收集器
参数 | 含义 | 说明 |
---|---|---|
-XX:+UseParallelGC | 使用ParallelGC | 新生代、吞吐量优先。 |
-XX:+UseParallelOldGC | 使用ParallelOldGC | 老年代、吞吐量优先 |
-XX:+UseParNewGC | 使用ParNewGC | 新生代、吞吐量优先 |
-XX:+UseSerialGC | 使用 SerialGC | 串行 |
-XX:+UseConcMarkSweepGC | 使用CMC GC | 老年代,停顿时间优先 |
-XX:+UseG1GC | 使用G1GC | 新生代、老年代、停顿时间优先 |
日志打印
参数 | 含义 | 说明 |
---|---|---|
-XX:+HeapDumpOnOutOfMemoryError | 启动堆内存溢出打印 | 当JVM堆内存溢出时(OOM时),自动生成dump文件 |
-XX:HeapDumpPath=path | 堆内存溢出打印目录 | -XX:HeapDumpPath=heap.hprof |
-XX:PrintGCDetails -XX:PrintGCDateStamps -XX:PrintGCDateStamps -Xloggc:gc.log | 打印GC日志 | 输出到gc.log文件中,使用 gcviewer 查看 |
-XX:+PrintTenuringDistribution | 打印晋升老年代日志 | |
部分重要参数
参数 | 含义 | 说明 |
---|---|---|
-XX:MaxTenuringThreshold=threshold | 设置提升来年代的最大临界值 | 默认值15 |
-XX:ConcGCThreads=n | 设置并行标记线程数 | 一般设置为CPU核数的 1/4 |
-XX:MaxGCPauseMillis=time | 最大停顿时间 | -XX:MaxGCPauseMillis=500 设置最大停顿时间为500ms。 设置太小会导致GC跟不上垃圾产生的速度,最终退化为FullGc |
-XX:+UseStringDeduplication | 字符串去重 | 节省大量内存,略微占用CPU时间(新生代回收时间增加)。 JDK 8u20,默认关闭。 1. 将新分配的字符串放入队列 2. MinorGc时,g1并发检查是否有字符串重复。 3. 如果他们的值一样,让他们引用同一个 char[] 4. String.intern() 关注的是字符串对象,这里关注的是 char[] |
-XX:+ClassUnloadingWithConcurrentMark | 并发标记类卸载 | 默认开启。当并发标记后,一个类加载器的所有类都不再使用, 则卸载它加载的所有类。 |
-XX:+PrintFlagsFinal | 启动时,打印所有的虚拟机参数 | 标记为{manageable}的参数,可以实时调整 |
-XX:CICompilerCount=2 | 设置并行编译数 | 建议:服务端JVM设置为2,客户端JVM设置为1 |
CMS参数
参数 | 含义 | 说明 |
---|---|---|
-XX:CMSInitiatingOccupancyFraction=percent | 开始CMS垃圾回收周期的老年代内存阈值 | |
G1参数
参数 | 含义 | 说明 |
---|---|---|
-XX:InitiatingHeapOccupancyPercent=percent | G1启动并发GC周期时,堆内存占比 | G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不是某一代的使用比。默认值是 45% |
-XX:G1HeapWastePercent=percent | 允许浪费堆空间占比 | 默认10%。小于10%时,不会触发mixedGC |
-XX:G1HeapRegionSize=size | 设置G1每个区域的大小 | 设置范围:1MB ~ 32M , 目标是设置大约2048个区域-XX:G1HeapRegionSize=16m // 设置区域大小为16M |
-XX:G1MixedGCLiveThresholdPercent=percent | 混合垃圾回收周期中,要包括的旧区域设置占用率阀值 | 默认65% |
-XX:G1MixedGCCountTarget=number | 在标记循环后设置混合垃圾收集的目标数量,以收集最多包含 G1OldCSetRegionThresholdPercent 活动数据的旧区域 | 默认8次混合垃圾回收 |
-XX:G1OldCSetRegionThresholdPercent=percent | MixedGC时,Old Region被加入到CSet中 | 默认10%,只把10%的OldRegion加入到CSet中 |