JVM常用参数配置及作用

本文详细介绍了Java虚拟机(JVM)的各种参数,包括标准参数、非标准参数和非稳定参数,涉及内存管理、运行模式、垃圾收集器选择以及线程和垃圾收集的配置。讲解了如-Xmx、-Xms、-XX:UseG1GC等参数的作用,同时提到了内存分代、堆和线程栈的配置,以及如何通过-XX:MaxGCPauseMillis等参数调整垃圾收集性能。此外,还讨论了GC日志、诊断调试工具和JavaAgent的使用。
摘要由CSDN通过智能技术生成

按参数形式分类

-参数 为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容

-D 设置系统属性

-X参数 为非标准参数, 基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容。 可以使用 java -X 命令来查看当前 JVM 支持的非标准参数

–XX: 为非稳定参数, 专门用于控制 JVM的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消

-XX:+-Flags 形式, +- 是对布尔值进行开关

-XX:key=value 形式, 指定某个选项的值

按功能分类

运行模式及优化

-server 设置 JVM 使用 server 模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境。在具有 64 位能力的 JDK 环境下将默认启用该模式,而忽略 -client 参数

-client JDK1.7 之前在32位的 x86 机器上的默认值是 -client 选项。设置 JVM 使用 client 模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者 PC 应用开发和调试。此外,我们知道 JVM 加载字节码后,可以解释执行,也可以编译成本地代码再执行,所以可以配置 JVM 对字节码的处理模式

-Xint 在解释模式(interpreted mode)下运行,-Xint 标记会强制 JVM 解释执行所有的字节码,这当然会降低运行速度,通常低10倍或更多

-Xcomp -Xcomp 参数与-Xint 正好相反,JVM 在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化。【注意预热】

-Xmixed -Xmixed 是混合模式,将解释模式和编译模式进行混合使用,有 JVM 自己决定,这是 JVM 的默认模式,也是推荐模式。 我们使用 java -version 可以看到 mixed mode 等信息

-XX:-OmitStackTraceInFastThrow 禁用异常fastThrow的优化,默认启用,如果异常重大量重复抛出时,省略异常栈信息从而快速抛出

内存

-Xmx 堆内存最大值, -XX:MaxHeapSize, -Xmx4g

-Xms 堆内存初始值, -XX:InitialHeapSize, -Xmx4g

分代

-Xmn 新生代初始值及最大值,-XX:NewSize(初始值), -XX:MaxNewSize,-Xmn2g 默认值NewRatio=2 老年代/新生代=2

-XX:+UseAdaptiveSizePolicy 设置分代大小自适应策略,如果配置这个参数,某些分代相关的参数就不生效了。默认启用

-XX:SurvivorRatio eden/survivor空间比例, -XX:SurvivorRatio=8(eden:s0:s1=8:1:1),实际测试默认值为6.x

-XX:InitialSurvivorRatio -XX:InitialSurvivorRatio=8

-XX:TargetSurvivorRatio YongGC之后,期望的幸存区百分比,默认:-XX:TargetSurvivorRatio=50

TargetSurvivorRatio越大,留在Survivor的对象越多,等到需要从Eden复制到Survivor的时候Survivor空间不够用的概率变高,只能提前晋升到老年代。

-XX:MaxTenuringThreshhold 新生代经过多少次gc后存活的对象移动到老年代,默认值-XX:MaxTenuringThreshold=15

-XX:PretenureSizeThreshold 大于这个参数值的对象直接在老年代分配 默认值为0

-XX:PermSize 永久代初始值,jdk8之前

-XX:MaxPermSize 永久代最大值,jdk8之前

其他

-XX:MaxDeirectMemorySize 直接内存最大值,默认值与堆最大值一致

-XX:TLABSize 设置TLAB(Thread Local Allocation Buffer)的初始值,-XX:TLABSize

-XX:MaxMetaspaceSize 元数据区最大值

线程

-Xss 每个线程栈的字节数,-XX:ThreadStackSize,-Xss1m

垃圾收集(GC)

指定垃圾收集器

-XX:+UseZGC 启用ZGC,-XX:+UnlockExperimentalVMOptions

-XX:+UseG1GC 启用G1垃圾收集器

-XX:+UseConcMarkSweepGC ParNew(新生代默认,也可以使用DefNew(Serial)),CMS(老年代)

-XX:+UseParallelGC ParallelScavenge(新生代),ParallelOld(老年代)

-XX:+UseSerialGC DefNew(新生代),SerialOld(老年代)

-XX:+/-UseParNewGC 使用或禁用ParNew收集器

Parallel(吞吐量优先收集器)

-XX:MaxGCPauseMillis 最大垃圾收集停顿时间

-XX:GCTimeRatio 期望GC消耗的时间不超过程序运行时间的1/(1+N),默认值为99

-XX:ParallelGCThreads 执行并行GC的线程数,-XX:ParallelGCThreads=8

CMS收集器

-XX:ConcGCThreads 执行并发GC的线程数,默认值为(处理器核心数量+3/4)

-XX:CMSInitiatingOccupancyFraction 当老年代达到70%时,触发CMS垃圾回收。0~100,默认92

G1垃圾收集器

-XX:MaxGCPauseMillis 最大GC停顿时间

-XX:G1HeapRegionSize Region大小,取值范围为1~32MB,为2的N次幂

GC日志

-XX:+PrintGC 打印GC日志

-XX:+PrintGCDetails 打印每次GC的详细信息

-XX:+PrintGCTimeStamps 打印每次GC发生的时间

-verbose:gc 在GC日志中输出详细的GC信息

-Xloggc:filename 将GC时间的信息保存到文件中

-Xlog:gc 在JDK 9之后使用-Xlog:gc*,用通配符*将GC标签下所有细分过程都打印出来,如果把日志级别调整到Debug或者Trace,还将获得更多细节信息

诊断调试

-XX:+-HeapDumpOnOutOfMemoryError 当OutOfMemoryError 产生,即内存溢出(堆内存或持久代) 时,自动 Dump 堆内存

-XX:HeapDumpPath 与 HeapDumpOnOutOfMemoryError 搭配使用,指定内存溢出时 Dump 文件的目录。如果没有指定则默认为启动 Java 程序的工作目录

-XX:OnError 发生致命错误时(fatal error)执行的脚本。例如, 写一个脚本来记录出错时间, 执行一些命令,或者 curl 一下某个在线报警的 url

-XX:OnOutOfMemoryError 抛出OutOfMemoryError 错误时执行的脚本

-XX:ErrorFile=filename 致命错误的日志文件名,绝对路径或者相对路径

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 远程调试

-XX:+FlightRecorder​​​​​​​ -XX:+UnlockCommercialFeatures ​​​​​​​ JMC飞行记录器

JavaAgent

agentlib:libname[=options] 启用native方式的agent,参考 LD_LIBRARY_PATH 路径

-agentpath:pathname[=options] 启用native方式的agent

-javaagent:jarpath[=options] 启用外部的 agent 库,比如 pinpoint.jar 等等

-Xnoagent 禁用所有 agent

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值