jvm参数调优

jvm参数

-XX:+或-XX:-的参数,表示该参数类型是boolean 类型,+表示开启,-表示 关闭
-XX:参数名= 参数值,表示 key ,value值类型,
如-Xms这类是特殊的 key,value值类型,
我们可以用jdk自带工具 jinfo 去查看jvm参数的设置

jinfo -flags 进程号
jinfo -flags 参数名 进程号

在这里插入图片描述

参数名称含义默认值解释
-Xms初始堆大小物理内存的1/64(<1GB)默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.
-Xmx最大堆大小物理内存的1/4(<1GB)默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn年轻代大小(1.4or lator)注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:NewSize设置年轻代大小(for 1.3/1.4)
-XX:MaxNewSize年轻代最大值(for 1.3/1.4)
-XX:PermSize设置持久代(perm gen)初始值物理内存的1/64
-XX:MaxPermSize设置持久代最大值物理内存的1/4
-Xss每个线程的堆栈大小JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右,一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。
-XX:NewRatio表示年轻代和老年代的占比默认是 1:3
-XX:SurvivorRatioEden区与Survivor区的大小比值默认为8:1,由于survivor有2个,所以单个survivor占整个新生代的1/5
-XX:LargePageSizeInBytes内存页的大小不可设置过大, 会影响Perm的大小 =128m
-XX:MaxTenuringThreshold垃圾最大年龄对象在新生代中存活的最大年龄,超过该值会进入老年代
-XX:PretenureSizeThreshold对象超过多大,直接在老年代分配0个字节新生代采用Parallel Scavenge GC时无效

垃圾收集器在这里插入图片描述

参数收集器名称新生代/老年代回收算法简介
-XX:+UseSerialGc串行收集器新生代复制最早的新生代收集器,适合单cpu,单核cup使用,避免了多线程切换的开销
-XX:+UseParNewGc并行收集器新生代复制并行收集器,采用了多线程并行收集,指定的线程数不要超过cpu核数,一般和CMS搭配使用
-XX:+UseParallelScavengeGc并行收集器新生代复制并行收集器,该收集器优先考虑吞吐量,如果应用对stop the word 比较敏感的话,不建议采用。
-XX:+UseSerialOldGc串行收集器老年代标记整理最早的老生代收集器串行收集器
-XX:+UseParallelOldGc并行收集器老生代标记整理老年代并行收集器,一般和ParallelScavengeGc 搭配使用
-XX:+UseConcMarkSweepGC并发收集器新生代标记清除jdk史上第一款并发老年代器,回收算法采用标记清除算法,CMSGc分4步,1.初始标记 2 并发标记 3重新标记 4 并发清理。1和3都是需要STW的,但暂停时间非常短,大大减少了gc的暂停时间。缺点是容易产生内存碎片,可以配置压缩内存参数。是jdk 1.8比较主流的gc回收器
-XX:+UseG1GC并发收集器新生代/老年代标记整理G1回收器虽保留了新生代和老年代的概念,但是2者在物理空间上已经不再划分开了,G1把堆化分了一个一个的region,region按优先级回收,回收算法采用的是标记整理。标记的过程和CMS一样,只是不会再有内存碎片的问题,JD8后推荐G1回收器

其他GC相关参数

参数名称含义默认值解释
-XX:ParallelGCThreads=n并行收集器的线程数同样适用于CMS
-XX:MaxGCPauseMillis = 时间每次垃圾回收的最长时间(最大暂停时间)如果无法满足此时间,JVM会自动调整堆大小或者其他参数,以满足此值.该值如果过小,jvm可能会调减小堆的内存,可能会引起频繁的gc,降低吞吐量
-XX:+UseAdaptiveSizePolicy设置此选项后,并行收集器会自动选择年轻代和老年代的比例,以达到目标系统规定的最低响应时间,吞吐量等
-XX:GCTimeRatio设置垃圾回收的时间占程序运行时间的百分比默认为99公式为1/(1+n),该值为吞吐量的倒数,例如 -XX:GCTimeRatio = 19表示,gc的时间占程序运行的总时间的5%
-XX:+UseCMSCompactAtFullCollection在FULL GC的时候, 对年老代的压进行内存的压缩。会影响些性能,但是可以消除碎片,一般搭配CMSFullGCsBeforeCompaction使用
-XX:CMSFullGCsBeforeCompaction=次数多少次fullgc后进行内存压缩,例如-XX:CMSFullGCsBeforeCompaction=3 表示3次内存压缩后执行内存压缩
-XX:+CMSParallelRemarkEnabled降低标记停顿
-XX:+UseCMSInitiatingOccupancyOnly使用手动定义初始化定义开始CMS收集禁止hostspot自行触发CMS GC
-XX:CMSInitiatingOccupancyFraction老年代内存使用多少后开始CMS回收
-XX:ParallelCMSThreads设定CMS的线程数量

GC信息打印配置

-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps
#打印对象分布
-XX:+PrintTenuringDistribution
#对比下GC前后堆内存情况 
-XX:+PrintHeapAtGC 
#打印暂停时间
-XX:+PrintGCApplicationStoppedTime

# GC日志输出的文件路径
-Xloggc:/path/to/gc-%t.log
# 开启日志文件分割
-XX:+UseGCLogFileRotation 
# 最多分割几个文件,超过之后从头开始写
-XX:NumberOfGCLogFiles=14
# 每个文件上限大小,超过就触发分割
-XX:GCLogFileSize=100M

总结

通常我们希望,gc时间短且次数少。但本就是一个相对的。
gc次数少,那就堆的空间肯定要大,堆大的话,单次gc持续的时间肯定会长些。必须要在此做出权衡

jvm调优的目的应该是尽量将对象驻留在新生代,减少fullgc的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值