已经帮你整理好JVM调优常用参数,学不学看你了

一、JVM 参数

参数描述示例
-version / -showversion两参数功能基本一样,输出 Java 版本号、JRE 版本号、JVM名称、类型、版本
-Xint / -Xcomp / -Xmixed指定 JVM 以解释模式、编译模式、混合模式运行
-XX:+PrintCommandLineFlags让 JVM 打印出用户设置的和 JVM 设置的详细的XX参数的名称和值

二、JVM 日志参数

参数描述示例
-XX:+PrintGC开启简单GC日志模式,为每一次新生代(young generation)的GC和每一次的Full GC打印一行信息
-XX:PrintGCDetails开启详细GC日志模式。在这种模式下,日志格式和所使用的GC算法有关
-XX:+PrintGCTimeStamps可以将时间也加到GC日志中
-XX:+PrintGCDateStamps可以将绝对的日期和时间加到GC日志中。推荐同时使用-XX:+PrintGCTimeStamps 和 -XX:+PrintGCDateStamps 这两个参数
-Xloggc缺省的GC日志时输出到终端的,使用-Xloggc:也可以输出到指定的文件。需要注意这个参数隐式的设置了参数-XX:+PrintGC和-XX:+PrintGCTimeStamps,但为了以防在新版本的JVM中有任何变化,我仍建议显示的设置这些参数

三、JVM 内存调优参数

参数描述示例
-server / -client以服务端 / 客户端运行 JVM
-Xms / -XX:InitialHeapSize指定 JVM 的初始堆内存大小,单位不区分大小写:k,m,g-Xms10m
-Xmx / -XX:MaxHeapSize指定 JVM 的最大堆内存大小,单位不区分大小写:k,m,g-Xmx2g
-XX:+HeapDumpOnOutOfMemoryErrorJVM 在发生内存溢出时自动的生成堆内存快照,一般配合 -XX:HeapDumpPath 使用
-XX:HeapDumpPath改变默认的堆内存快照生成路径,指定 JVM 堆内存快照生成路径(绝对路径或相对路径)-XX:HeapDumpPath=/usr/local/heap
-XX:NewRatio当 JVM 内存溢发生时可以执行一些指令,比如发个E-mail或者执行一些清理工作-XX:OnOutOfMemoryError ="sh ~/restart.sh"
-XX:PermSize设置永久代初始大小,注意:设置的永久代大小并不会被包括在使用参数-XX:MaxHeapSize 设置的堆内存大小中-XX:PermSize=128m
-XX:MaxPermSize设置永久代大小的最大值,注意:设置的永久代大小并不会被包括在使用参数-XX:MaxHeapSize 设置的堆内存大小中-XX:MaxPermSize=256m
-XX:InitialCodeCacheSize
-XX:ReservedCodeCacheSize
-XX:+UseCodeCacheFlushing
-XX:NewSize指定 JVM 新生代初始大小-XX:NewSize=32m
-XX:MaxNewSize指定 JVM 新生代最大大小。设置 XX:MaxNewSize 参数时,应该考虑到新生代只是整个堆的一部分,新生代设置的越大,老年代区域就会减少。一般不允许新生代比老年代还大,因为要考虑GC时最坏情况,所有对象都晋升到老年代-XX:MaxNewSize=512m
-XX:NewRatio设置老年代与新生代的比例。如果针对新生代,同时定义绝对值和相对值,绝对值将起作用。java -XX:NewSize=32m -XX:MaxNewSize=512m -XX:NewRatio=3 MyApp JVM 会尝试为新生代分配四分之一的堆大小,但不会小于32MB或大于521MB-XX:NewRatio=3 表示老年代/新生代为3/1。老年代占堆大小的 3/4 ,新生代占 1/4
-XX:SurvivorRatio指定 Eden 与幸存区大小比例-XX:SurvivorRatio=10 表示 Eden 是幸存区 To 大小的10倍(也是幸存区From的10倍)。所以 Eden 占新生代大小的10/12, 幸存区From和幸存区To 每个占新生代的1/12 。注意两个幸存区永远是一样大的
-XX:+PrintTenuringDistribution指定 JVM 在每次新生代GC时,输出幸存区中对象的年龄分布
-XX:InitialTenuringThreshold设定老年代阀值的初始值
-XX:MaxTenuringThreshold设定老年代阀值的最大值
-XX:TargetSurvivorRatio设定幸存区的目标使用率
-XX:+NeverTenure设置对象永远不会晋升到老年代
-XX:+AlwaysTenure表示没有幸存区,所有对象在第一次GC时,会晋升到老年代

四、JVM 吞吐量收集器参数

参数描述示例
-XX:+UseSerialGC指定 JVM 使用串行垃圾收集器
-XX:+UseParallelGC指定 JVM 年轻代使用并行垃圾收集
-XX:+UseParallelOldGC指定 JVM 年轻代使用并行垃圾收集,年老代也使用并行垃圾收集
-XX:ParallelGCThreads指定并行垃圾收集的线程数量。如果不明确设置该标志,虚拟机将使用基于可用(虚拟)处理器数量计算的默认值。 决定因素是由Java Runtime。availableProcessors()方法的返回值N,如果N<=8,并行垃圾收集器将使用N个垃圾收集线程,如果N>8个可用处理器,垃圾收集线程数量应为3+5N/8-XX:ParallelGCThreads=6 表示每次并行垃圾收集将有6个线程执行
-XX:-UseAdaptiveSizePolicy停用 JVM 自适应行为,默认 JVM 是激活自适应行为的
-XX:GCTimeRatio指定目标应用程序线程的执行时间(与总的程序执行时间)达到N/(N+1)的目标比值,默认值是99通过 -XX:GCTimeRatio=9 我们要求应用程序线程在整个执行时间中至少9/10是活动的(因此,GC线程占用其余1/10)
-XX:MaxGCPauseMillis设置 JVM 最大暂停时间的目标值(以毫秒为单位)-XX:MaxGCPauseMillis=20

五、JVM CMS 收集器参数

并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间。适用于大多数交互式应用,比如 web 应用。

参数描述示例
-XX:+UseConcMarkSweepGC激活 CMS 收集器。默认HotSpot JVM使用的是并行收集器
-XX:UseParNewGC激活年轻代使用多线程并行执行垃圾回收。对于CMS收集器,年轻代GC算法和老年代GC算法是不同的,因此年轻代GC有两种不同的实现,并且是两个不同的标志。注意最新的JVM版本,当使用-XX:+UseConcMarkSweepGC时,-XX:UseParNewGC会自动开启。因此,如果年轻代的并行GC不想开启,可以通过设置-XX:-UseParNewGC来关掉。
-XX:+CMSConcurrentMTEnabled并发的CMS阶段将以多线程执行(因此多个GC线程会与所有的应用程序线程并行工作)。该标志已经默认开启,如果顺序执行更好,这取决于所使用的硬件,多线程执行可以通过-XX:-CMSConcurremntMTEnabled 禁用
-XX:ConcGCThreads定义并发CMS过程运行时的线程数。如果还标志未设置,JVM会根据并行收集器中的 -XX:ParallelGCThreads 参数的值来计算出默认的并行CMS线程数。该公式是ConcGCThreads = (ParallelGCThreads + 3)/4-XX:ConcGCThreads=4 意味着CMS周期的所有阶段都以4个线程来执行
-XX:CMSInitiatingOccupancyFraction当堆满之后,并行收集器便开始进行垃圾收集。-XX:CMSInitiatingOccupancyFraction=<value> 该值代表老年代堆空间的使用率。比如,value=75 意味着第一次CMS垃圾收集会在老年代被占用75%时被触发。通常 CMSInitiatingOccupancyFraction 的默认值为 68
-XX:+UseCMSInitiatingOccupancyOnly设置 JVM 不基于运行时收集的数据来启动 CMS 垃圾收集周期。而是,当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集。
-XX:+CMSClassUnloadingEnabled设置 JVM 对永久代进行垃圾回收
-XX:+CMSIncrementalMode将开启 CMS 收集器的增量模式。增量模式经常暂停 CMS 过程,以便对应用程序线程作出完全的让步。因此,收集器将花更长的时间完成整个收集周期。因此,只有通过测试后发现正常 CMS 周期对应用程序线程干扰太大时,才应该使用增量模式。这种情况发生得很少
-XX:+ExplicitGCInvokesConcurrent设置 JVM 无论什么时候调用系统GC,都执行 CMS GC,而不是 Full GC
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses保证当有系统GC调用时,永久代也被包括进 CMS 垃圾回收的范围内
-XX:+DisableExplicitGC设置 JVM 完全忽略系统的GC调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lytao123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值