JVM参数与命令

JVM常用参数

标准参数

标准参数不会随着JDK版本升级而改变。

  • -version
  • -help
  • -server
  • -cp

-X参数

非标准化参数,可能会随着JDK版本变动。

  • -Xint:解释执行
  • -Xcomp:第一次使用就编译本地代码
  • -Xmixed:混合模式,JVM自己来决定

-XX参数

用的最多的参数,也是非标准化参数,主要用于JVM调优和Debug。
(1)Boolean类型

格式:-XX:[+-]<name>
  • +或-表示启用或者禁用name属性

(2)非Boolean类型

格式:-XX<name>=<value>
  • 表示name属性值是value

(3)其它类型

-Xms1000M 等价于 -XX:InitialHeapSize=1000M
-Xmx1000M 等价于 -XX:MaxHeapSize=1000M
-Xss100 等价于 -XX:ThreadStackSize=100

查看参数

java -XX:+PrintFlagsFinal -version > flags.txt

在这里插入图片描述

"="表示默认值,“:=”表示被用户或者JVM修改后的值

常用参数及其含义

参数含义说明
-XX:CICompilerCount=3最大并行编译数如果设置大于1,虽然编译速度会提高,但是同样影响系统稳定性,会增加JVM崩溃的可能
-XX:InitialHeapSize=100M初始化堆大小简写-Xms100M
-XX:MaxHeapSize=100M最大堆大小简写-Xms100M
-XX:NewSize=20M设置年轻代的大小
-XX:MaxNewSize=50M年轻代最大大小
-XX:OldSize=50M设置老年代大小
-XX:MetaspaceSize=50M设置方法区大小
-XX:MaxMetaspaceSize=50M方法区最大大小
-XX:+UseParallelGC使用UseParallelGC新生代,吞吐量优先
-XX:+UseParallelOldGC使用UseParallelOldGC老年代,吞吐量优先
-XX:+UseConcMarkSweepGC使用CMS老年代,停顿时间优先
-XX:+UseG1GC使用G1GC新生代,老年代,停顿时间优先
-XX:NewRatio新老生代的比值比如-XX:Ratio=4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5
-XX:SurvivorRatio两个S区和Eden区的比值比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一个S占整个新生代的1/10
-XX:+HeapDumpOnOutOfMemoryError启动堆内存溢出打印当JVM堆内存发生溢出时,也就是OOM,自动生成dump文件
-XX:HeapDumpPath=heap.hprof指定堆内存溢出打印目录表示在当前目录生成一个heap.hprof文件
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:g1-gc.log打印出GC日志可以使用不同的垃圾收集器,对比查看GC情况
-Xss128k设置每个线程的堆栈大小经验值是3000-5000最佳
-XX:MaxTenuringThreshold=6提升年老代的最大临界值默认值为 15
-XX:InitiatingHeapOccupancyPercent启动并发GC周期时堆内存使用占比G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示”一直执行GC循环”. 默认值为 45.
-XX:G1HeapWastePercent允许的浪费堆空间的占比默认是10%,如果并发标记可回收的空间小于10%,则不会触发MixedGC。
-XX:MaxGCPauseMillis=200msG1最大停顿时间暂停时间不能太小,太小的话就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。
-XX:ConcGCThreads=n并发垃圾收集器使用的线程数量默认值随JVM运行的平台不同而不同
-XX:G1MixedGCLiveThresholdPercent=65混合垃圾回收周期中要包括的旧区域设置占用率阈值默认占用率为 65%
-XX:G1MixedGCCountTarget=8设置标记周期完成后,对存活数据上限为 G1MixedGCLIveThresholdPercent 的旧区域执行混合垃圾回收的目标次数默认8次混合垃圾回收,混合回收的目标是要控制在此目标次数以内
-XX:G1OldCSetRegionThresholdPercent=1描述Mixed GC时,Old Region被加入到CSet中默认情况下,G1只把10%的Old Region加入到CSet中

JVM常用命令

jps

jps命令用于查看java进程。

jinfo

(1)实时查看和调整JVM配置参数
(2)查看进程运行信息

# 查看某个java进程的name属性值
jinfo -flag name PID

(3)实时修改参数
只有被标记为manageable的flags可以被实时修改

jinfo -flag [+|-] PID
jinfo -flag <name>=<value> PID

(4)查看之前赋值过的参数

jinfo -flags PID

jstat

(1)查看虚拟机性能统计信息
(2)查看类装载信息

# 查看某个java进程的类装载信息,每1000ms输出一次,共输出10次
jstat -class PID 1000 10

(3)查看垃圾收集信息

jstat -gc PID 1000 10

jstack

jstack 用于查看线程堆栈信息

jstack PID

jmap

(1)生成堆存储快照
(2)打印堆内存相关信息

jmap -heap PID

(3)dump出堆内存相关信息

jmap -dump:format=b,file=heap.hprof PID

(4)内存溢出时自动dump
添加如下两个JVM参数:

  • -XX:+HeadDumpOnOutOfMemoryError
  • -XX:HeapDumpPath=heap.hprof

JVM中常用参数与垃圾收集器常用参数

-Xmx:设置堆的最大值,一般为操作系统的2/3
-Xms:设置堆的初始值,一般和Xmx一样大避免扩容
-Xmn:年轻代的大小,默认占堆的1/3,G1中会自动设置
-Xss:设置栈的大小,默认1M

-XX:+UseTLAB	使用TLAB,默认开启
-XX:+PrintTLAB	打印TLAB的使用情况
-XX:TLABSize	设置TLAB大小
-XX:+DisableExplicitGC	启用用于禁用对的调用处理的选项System.gc()
-XX:+PrintGC	查看GC基本信息
-XX:+PrintGCDetails	查看GC详细信息
-XX:+PrintHeapAtGC	每次GC后都打印信息
-XX:+PrintGCTimeStamps	启用在每个GC上打印时间戳的功能
-XX:+PrintGCApplicationConcurrentTime	打印应用程序时间(低)
-XX:+PrintGCApplicationStoppedTime 	打印暂停时长(低)
-XX:+PrintReferenceGC 	记录回收了多少种不同引用类型的引用(重要性低)
-verbose:class		类加载详细过程
-XX:+PrintVMOptions	可在程序运行时,打印虚拟机接受到的命令行显示参数
-XX:+PrintFlagsFinal -XX:+PrintFlagsInitial	打印所有的JVM参数、查看所有JVM参数启动的初始值(必须会用)
-XX:MaxTenuringThreshold	升代(分代)年龄,这个值在CMS 下默认为 6,G1 下默认为 15,这个值和我们前面提到的对象提升有关,改动效果会比较明显。对象的年龄分布可以使用 -XX:+PrintTenuringDistribution 打印,如果后面几代的大小总是差不多,证明过了某个年龄后的对象总能晋升到老生代,就可以把晋升阈值设小

Parallel常用参数

设置Eden区空间大小与Survivor空间大小的比率,默认情况为8。

-XX:SurvivorRatio

大对象到底多大,大于这个值的参数直接放在老年代

-XX:PreTenureSizeThreadhold

升代年龄,最大15,并行收集器的默认为15,CMS默认为6

-XX:MaxTenuringThreadhold

并行收集器的线程数,同样适用于CMS,一般与CPU核数相同或者N+1

-XX:+ParallelGCThreads

自动选择堆中各区域大小比例

-XX:+UseAdaptiveSizePolicy

CMS常用参数

启用CMS

-XX:+UseConcMarkSweepGC

并行收集器的线程数

-XX:+ParallelGCThreads

使用多少比例的老年代后开始CMS垃圾收集,默认是68%,如果频繁发生SerialOld停顿,应该调小

-XX:CMSInitiatingOccupancyFraction

Full GC时进行压缩

-XX:+UseCMSCompactAtFullCollection

多少次Full GC之后进行压缩

-XX:CMSFullGCsBeforeCompaction

使用并发标记扫表CMS垃圾收集器时,启动类卸载,默认启用

-XX:+CMSClassUnloadingEnabled

停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代

-XX:MAxGCPauseMillis

G1常用参数

启用G1

-XX:+UseG1GC

设置最大GC暂停时间的目标(以毫秒为单位)。这是一个软目标,并且JVM将尽最大的努力(G1会尝试调整Young区的块数来)来实现它。默认情况下,没有最大暂停时间值。

-XX:MaxGCPauseMillis

GC的间隔时间

-XX:GCPauseIntervalMillis

单个Region大小,取值是1M-32M,建议逐渐增大该值,1 2 4 8 16 32。随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长-XX:G1NewSizePercent 新生代最小比例,默认为1/2000

-XX:+G1HeapRegionSize         你的堆内存小于2G的时候       4C8G起步

新生代最大比例,默认为60%

-XX:G1MaxNewSizePercent

时间建议比例,G1会根据这个值调整堆空间

-XX:GCTimeRatioGC

初始标记线程数量

-XX:ConcGCThreads

启动G1的堆空间占用比例,根据整个堆的占用而触发并发GC周期

-XX:InitiatingHeapOccupancyPercent
  • 41
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值