JVM学习--JVM运行时参数

1.JVM参数选项类型:
类型一:标准参数选项:
特点: 比较稳定,后续版本基本不会变化,以 - 开头。

各种选项的解释及用法如下图所示,运行Java/java -help 可以参看所有标准选项。

补充内容:-server 与 -client
类型二:-X参数选项:
特点: 非标准化参数,功能还是比较稳定的,但是官方说可能会变更,以 -X 开头。

各种选项的解释及用法如下图所示,运行java -X 可以参看所有的 X选项。
JVM的JIT编译模式相关选项:

-Xint:禁用JIT,所有字节码都会被解释执行,速度最慢。

-Xcomp:所有字节码第一次使用就被编译成本地代码,然后再执行。

-Xmixed:混合模式,默认模式。
特别地:

-Xmx -Xms -Xss 属于 XX 参数?-Xms 设置初始 Java堆大小,等价于 -XX:InitialHeapSize;-Xmx 设置最大 Java堆大小,等价于-XX:MaxHeapSize;-Xss 设置 Java线程堆栈大小,等价于-XX:ThreadStackSize。
类型三:-XX参数选项:
特点: 非标准化参数,使用最多的参数类型,属于实验性选项,不稳定,以 -XX 开头。
作用: 用于开发和调试JVM。
分类: Boolean类型格式、非Boolean类型格式(key-value类型)。
Boolean类型格式:
-XX:+<参数> 表示启用参数属性。
-XX:-<参数> 表示禁用参数属性。

举例:-XX:-UseParallelGC 不使用并行垃圾收集器,-XX:+UseG1GC 启用G1垃圾收集器,-XX:+UseAdaptiveSizePolicy 自动选择年轻代区大小和相应的Survivor区比例。说明: 因为有的指令默认开启,所以可以使用 - 关闭,-XX:-UseParallelGC 不使用并行垃圾收集器。
非Boolean类型格式:
子类型1: 数值型格式 -XX:<参数>=<数字>

子类型2: 非数值型格式 -XX:<名字>=<字符串>

特别地: -XX:+PrintFlagFinal,输出所有参数的名称和默认值,默认不包括 Diagnostic 和 Experimental 的参数,可以配合 -XX:+UnlockDiagnosticVMOptions 和 -XX:UnlockExperimentalVMOptions 使用。

2.添加JVM参数选项

运行jar包:java -Xms50m -Xmx50m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -jar demo.jar 。

通过tomcat运行war包:①Linux系统下可以在tomcat/bin/catalina.sh中添加如下配置:JAVA_OPTS="-Xms512M -Xmx512M"。②Windows系统下在catalina.bat中添加如下配置:set "JAVA_OPTS=-Xms512M -Xmx512M"。

程序运行过程中:①使用jinfo -flag <参数名>=<参数值> <进程id> 设置非Boolean类型参数。②使用jinfo -flag [+|-] <参数名> <进程id> 设置Boolean类型参数。

3.常用的JVM参数选项

打印设置的XX选项及值:①-XX:+PrintCommandLineFlags:程序运行前打印用户手动设置或者JVM自动设置的XX选项。②-XX:+PrintFlagsInitial:打印所有XX选项的默认值。③-XX:+PrintFlagsFinal:打印XX选项在运行程序时生效的值。④-XX:PrintVMOptions:打印JVM的参数。
3.1.堆、栈、方法区等内存大小设置:

①栈:-Xss128k--设置每个线程的栈大小为128k,等价于-XX:ThreadStackSize=128k。

②堆内存:

-Xms3550m:等价于-XX:InitialHeapSize,设置JVM初始内存为3550M。

-Xmx3550m:等价于-XX:MaxHeapSize,设置JVM最大内存为3550M。

-Xmn2g:设置年轻代大小为2G,官方推荐配置为整个堆大小的3/8。

-XX:NewSize=1024m:设置年轻代初始值为1024M。

-XX:MaxNewSize=1024m,设置年轻代最大值为1024M。

-XX:SurvivorRatio=8,设置年轻代中Eden区与一个Survivor区的比值,默认为8。

-XX:+UseAdaptiveSizePolicy:自动选择各区大小比例。

-XX:NewRatio=4:设置老年代与年轻代(包括1个Eden和2个Survivor区)的比值。

-XX:PretenureSizeThreadshold=1024,设置让大于此阈值的对象直接分配在老年代,单位为字节,只对Serial、ParNew收集器有效。

-XX:MaxTenuringThreshold=15:默认值为15,新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的这个值时就进入老年代。

-XX:+PrintTenuringDistribution:让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布。

-XX:TargetSurvivorRatio:表示MinorGC结束后Survivor区域中占用空间的期望值比例。

③方法区:

永久代:-XX:PermSize=256m:设置永久代初始值为256M;-XX:MaxPermSize=256m:设置永久代最大值为256M。

元空间:

-XX:MetaspaceSize:初始空间大小;-XX:MaxMetaspaceSize:最大空间大小,默认没有限制。

-XX:+UseCompressedOops:压缩对象指针。

-XX:+UseCompressedClassPointers:压缩类指针。

-XX:CompressedClassSpaceSize:设置class matespace的大小,默认为1G。

④直接内存:-XX:MaxDirectMemorySize,指定DirectMemory容量,若未指定,则默认与Java堆最大值一样。
3.2.OutOfMemory相关的选项:

-XX:+HeapDumpOnOutOfMemoryError:表示在内存出现OOM的时候,把Heap转存(Dump)到文件,以便后续分析。

-XX:+HeapDumpBeforeFullGC:表示在出现FullGC之前,生成Heap转储文件。

-XX:HeapDumpPath=<路径>:指定heap转存文件的存储路径。

-XX:OnOutOfMemoryError:

指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行此脚本。
3.3.垃圾收集器相关选项:

查看默认的垃圾收集器:-XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器),使用命令行指令:jinfo -flag 相关垃圾回收器参数 进程ID。

①Serial垃圾回收器:

②ParNew垃圾回收器:

③Parallel垃圾回收器:

④CMS垃圾回收器:

补充参数:

特别说明:

⑤G1垃圾回收器:

Mixed GC调优参数:

⑥如何选择垃圾回收器:
3.4.GC日志相关选项:

3.4.1.常用参数:

①-verbose:gc 输出gc日志信息,默认输出到标准输出。可独立使用。

②-XX:+PrintGC 等价于 -verbose:gc,表示打开简化的GC日志。 可独立使用。

③-XX:+PrintGCDetails 在发生垃圾回收时打印内存回收详细的日志,并在进程退出时输出当前内存各区域分配情况。可独立使用。

④-XX:PrintGCTimeStamps 输出GC发生时的时间戳。不可独立使用,需配合-XX:+PrintGCDetails使用。

⑤-XX:+PrintGCDateStamps 输出GC发生时的时间戳(以日期的形式,如2025-01-01T10:10:10.249+0800)。不可独立使用,需配合-XX:+PrintGCDetails使用。

⑥-XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息,可独立使用。

⑦-Xloggc:<文件> 把GC日志写入到一个文件中,而不是打印到标准输出中。

3.4.2.其他参数:

3.5其他参数:

4.通过Java代码获取JVM参数

通过Runtime获取:

相关推荐
知识分享小能手6 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao9 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾9 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT10 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa10 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落11 小时前
Python学习之装饰器
开发语言·python·学习
speop12 小时前
llm的一点学习笔记
笔记·学习
非凡ghost12 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
ue星空13 小时前
月2期学习笔记
学习·游戏·ue5
萧邀人13 小时前
第二课、熟悉Cocos Creator 编辑器界面
学习