JVM调优

JVM的调优主要涉及内存区域大小设置和垃圾回收算法,JVM内存结构如下图

JVM调优_第1张图片
JVM内存区域分为年轻代、年老代、永久区。
年轻代分为伊甸园区和两个大小相等的幸存区Survivor

一、设置JVM启动时初始内存堆大小

java -Xms2048m

二、设置JVM最大内存堆大小

java -Xmx3076m

三、设置JVM年轻代内存大小

java -Xmn2G

四、设置年轻代与年老代比例

java -XX:NewRatio=4

年轻代/年老代=1/4

五、设置年轻代中Eden与幸存区Survivor大小比例

java -XX:SurvivorRatio=2:3

Eden/Survivor=3/1

JVM调优_第2张图片

六、设置内存堆持久区大小为16M

java -XX:MaxPermSize=16M

七、设置年轻代对象回收策略

java -XX:MaxTenuringThredhold=0

如果设置为0,则年轻代对象不经过Survivor幸存区直接进入年老代,
如果设置为比较大的数值,则年轻代对象会在Survivor幸存区进行多次复制,最后进入年老代.

八、设置年轻代并行回收垃圾

java -XX:+UseParallelGC -XX:ParallelGCThreads=20

配置年轻代使用20个线程,并发收集垃圾

九、设置年老代并行回收垃圾

-XX:+UseParallelOldGC -XX:ParallelGCThread=10

配置年老代使用20个线程,并发收集垃圾

十、设置年轻代垃圾回收时间限制

java -XX:MaxGCPauseMillis=200

设置年轻代垃圾回收的最长毫秒数,如果无法满足此时间,JVM自动调整年轻代大小以满足此时间限制

十一、自动调整

java -XX:+UseAdaptiveSizePolicy

设置此选项,并行收集器自动调整年轻代区大小和相应幸存区Survivor的比例,以达到目标系统规定的最低响应时间和收集频率。

十二、设置垃圾并发回收

java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC

-XX:+UseParNewGC 设置年轻代为并行收集
-XX:+UseConcMarkSweepGC 设置年老代为并行收集

十三、垃圾压缩与整理

java -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection

-XX:CMSFullGCsBeforeCompaction=5 由于并发收集器不对内存空间进行压缩、整理,所以会导致内存"碎片",设置此值代表运行多少次垃圾回收后对内存进行压缩和整理
-XX:+UseCMSCompactAtFullCollection 开启年老代的压缩与整理

十四、设置串行收集器
java -XX:+UseSerialGC 设置串行收集器

十五、设置JVM运行吞吐率

java -XX:GCTimeRatio=n 设置垃圾回收时间占程序运行时间百分比 公司为1/(1+n)

JVM调优_第3张图片

JVM调优_第4张图片

你可能感兴趣的:(Java)