jvm 调优参数

发布时间 2023-04-14 17:00:26作者: HANGYCHN

jvm 参数

参数 作用 建议
-Xms 堆内存最小值 与 Xmx 相等,避免每次空间不足,动态扩容带来的影响
-Xmx 堆内存最大值 与 Xms 相等,避免每次空间不足,动态扩容带来的影响
-Xmn 新生代大小 过小会增加Minor GC频率,过大会减小老年代的大小。一般设为整个堆空间的1/4或1/3.
-Xss 每个线程池的堆栈大小 在jdk5以上的版本,每个线程堆栈大小为1m,jdk5以前的版本是每个线程池大小为256k。
一般在相同物理内存下,如果减少-xss值会产生更大的线程数,但不同的操作系统对进程内线程数是有限制的,是不能无限生成
-XX:NewRatio 新生代与老年代比值 -XX:NewRatio=4 表示新生代与老年代所占比例为1:4 ,新生代占比整个堆的五分之一。
如果设置了-Xmn的情况下,该参数是不需要在设置的
-XX:PermSize 非堆区初始值 默认是物理内存的六十四分之一
-XX:MaxPermSize 非堆区最大值 默认是物理内存的四分之一,一般来说,MaxPermSize设为64MB可以满足绝大多数的应用了。
若依然出现方法区溢出,则可以设为128MB。若128MB还不能满足需求,那么就应该考虑程序优化了
-XX:MaxTenuringThreshold 新生代中对象存活次数,默认15
-XX:SurvivorRatio Eden区与Subrvivor区大小的比值 如果设置为8,两个Subrvivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的十分之一
-XX:+UseFastAccessorMethods 原始类型快速优化
-XX:+AggressiveOpts 编译速度加快
-XX:PretenureSizeThreshold 对象超过多大值时直接在老年代中分配

垃圾收集器参数

参数 作用
-XX:+UseSerialGC 串行垃圾回收,现在基本很少使用。
-XX:+UseParNewGC 新生代使用并行,老年代使用串行
-XX:+UseConcMarkSweepGC 新生代使用并行,老年代使用CMS(一般都是使用这种方式),CMS是Concurrent Mark Sweep的缩写,并发标记清除,一看就是老年代的算法,所以,它可以作为老年代的垃圾回收器。CMS不是独占式的,它关注停顿时间
-XX:ParallelGCThreads 指定并行的垃圾回收线程的数量,最好等于CPU数量
-XX:+DisableExplicitGC 禁用System.gc(),因为它会触发Full GC,这是很浪费性能的,JVM会在需要GC的时候自己触发GC
-XX:CMSFullGCsBeforeCompaction 在多少次GC后进行内存压缩,这个是因为并行收集器不对内存空间进行压缩的,所以运行一段时间后会产生很多碎片,使得运行效率降低
-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX:+UseCMSCompactAtFullCollection 在每一次Full GC时对老年代区域碎片整理,因为CMS是不会移动内存的,因此会非常容易出现碎片导致内存不够用的
-XX:+UseCmsInitiatingOccupancyOnly 使用手动触发或者自定义触发cms 收集,同时也会禁止hostspot 自行触发CMS GC
-XX:CMSInitiatingOccupancyFraction 使用CMS作为垃圾回收,使用70%后开始CMS收集
-XX:CMSInitiatingPermOccupancyFraction 设置perm gen使用达到多少%比时触发垃圾回收,默认是92%
-XX:+CMSIncrementalMode 设置为增量模式
-XX:+CmsClassUnloadingEnabled CMS是不会默认对永久代进行垃圾回收的,设置此参数则是开启
-XX:+PrintGCDetails 开启详细GC日志模式,日志的格式是和所使用的算法有关
-XX:+PrintGCDateStamps 将时间和日期也加入到GC日志中