当前位置 : 主页 > 编程语言 > java >

JVM常用调优参数

来源:互联网 收集:自由互联 发布时间:2023-02-04
目录 ​​JVM内存模型及常用参数​​ ​​参数解释​​ ​垃圾收集器​ ​​Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)​​ ​​Parallel Scavenge收集器(-XX:+UseParallelGC -XX:+UseParallelOldGC)​​

目录

  • ​​JVM内存模型及常用参数​​
  • ​​参数解释​​
  • ​垃圾收集器​
  • ​​Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)​​
  • ​​Parallel Scavenge收集器(-XX:+UseParallelGC -XX:+UseParallelOldGC)​​
  • ​​ParNew收集器(-XX:+UseParNewGC) + CMS收集器(-XX:+UseConcMarkSweepGC)​​
  • ​​垃圾回收统计信息​​
  • ​​CMS的相关核心参数​​
  • ​​附:相关文章​​

JVM内存模型及常用参数

JVM常用调优参数 _老年代

参数解释

  • ​​-XX:SurvivorRatio​​:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5
  • ​​-XX:TargetSurvivorRatio​​:对象动态年龄判断:当前放对象的Survivor区域中一批对象的总大小大于这块Survivor区域内存大小的50%,那么此时大于等于这批对象年龄最大值的对象,就可以直接进入老年代了
  • ​​-XX:-HandlerPromotionFailure​​:老年代空间分配担保机制:Minor GC后JVM会算一下老年代剩余的可用空间。如果可用空间小于年轻代中所有对象大小之和(包括垃圾对象)。则会看是否设置了​​-XX:-HandlerPromotionFailure​​(1.8默认设置了)参数
  • 垃圾收集器

    JVM常用调优参数 _老年代_02

    Serial收集器(​​-XX:+UseSerialGC -XX:+UseSerialOldGC​​)

    • 新生代采用复制算法,老年代采用标记-整理算法

    Parallel Scavenge收集器(​​-XX:+UseParallelGC -XX:+UseParallelOldGC​​)

    • Parallel收集器其实就是Serial收集器的多线程版本
    • Parallel Scavenge收集器关注点是吞吐量(高效率的利用CPU)。CMS等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是CPU中用于运行用户代码的时间与CPU总消耗时间的比值
    • 新生代采用复制算法,老年代采用标记-整理算法

    ParNew收集器(​​-XX:+UseParNewGC​​​) + CMS收集器(​​-XX:+UseConcMarkSweepGC​​)

    • 垃圾收集线程与用户线程(基本上)同时工作
    • 新生代采用复制算法,老年代采用标记-清除算法
    • ParNew:
    • ParNew收集器其实跟Parallel收集器很类似,区别主要在于它可以和CMS收集器配合使用
    • CMS:
    • 优点:
    • 并发收集、低停顿
    • 缺点:
  • 对CPU资源敏感(会和服务抢资源);
  • 无法处理浮动垃圾(在并发标记和并发清理阶段又产生垃圾,这种浮动垃圾只能等到下一次gc再清理了);
  • 它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生,当然通过参数-XX:+UseCMSCompactAtFullCollection可以让jvm在执行完标记清除后再做整理执行过程中的不确定性,会存在上一次垃圾回收还没执行完,然后垃圾回收又被触发的情况,特别是在并发标记和并发清理阶段会出现,一边回收,系统一边运行,也许没回收完就再次触发full gc,也就是"concurrent mode failure",此时会进入stop the world,用serial old垃圾收集器来回收
  • JVM常用调优参数 _垃圾回收_03

    垃圾回收统计信息

    • ​​-XX:+PrintGC​​
    • ​​-XX:+PrintGCDetails​​
    • ​​-XX:+PrintGCTimeStamps​​
    • ​​-Xloggc:filename​​

    CMS的相关核心参数

    • ​​-XX:+UseConcMarkSweepGC​​:启用cms
    • ​​-XX:ConcGCThreads​​:并发的GC线程数
    • ​​-XX:+UseCMSCompactAtFullCollection​​:FullGC之后做压缩整理(减少碎片)
    • ​​-XX:CMSFullGCsBeforeCompaction​​:多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一次
    • ​​-XX:CMSInitiatingOccupancyFraction​​:当老年代使用达到该比例时会触发FullGC(默认是92,这是百分比)
    • ​​-XX:+UseCMSInitiatingOccupancyOnly​​:只使用设定的回收阈值(-XX:CMSInitiatingOccupancyFraction设定的值),如果不指定,JVM仅在第一次使用设定值,后续则会自动调整
    • ​​-XX:+CMSScavengeBeforeRemark​​:在CMS GC前启动一次minor gc,降低CMS GC标记阶段(也会对年轻代一起做标记,如果在minor gc就干掉了很多对垃圾对象,标记阶段就会减少一些标记时间)时的开销,一般CMS的GC耗时 80%都在标记阶段
    • ​​-XX:+CMSParallellnitialMarkEnabled​​:表示在初始标记的时候多线程执行,缩短STW
    • ​​-XX:+CMSParallelRemarkEnabled​​:在重新标记的时候多线程执行,缩短STW
    上一篇:JVM调优思路
    下一篇:没有了
    网友评论