JVM—运行参数

本文详细介绍了JVM的运行参数,包括标准参数和-XX参数。重点讲解了如-Xms、-Xmx设置堆内存大小,-XX:+PrintFlagsFinal打印所有参数,-XX:NewRatio和-XX:SurvivorRatio配置年轻代与老年代比例,以及各种GC策略和监控选项,如-XX:+UseG1GC、-XX:+PrintGCDetails等,帮助优化JVM性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM—运行参数

运行参数类型分类:

  • 标准参数(很稳定,在未来JVM版本中不会改变):
    • -help
    • -version
  • -X参数(非标准参数):
    • -Xint
    • -Xcomp
  • -XX参数(使用频率高):
    • -XX:newSize
    • -XX:+UseSerialGC

标准参数

命令窗口(cmd , bash)输入:

java -version 查看Java版本

java -help 查看java的命令参数及解释


-XX参数:

-XX 参数有两种类型,一种是boolean类型,一种是非boolean类型

  • boolean类型:
    • 格式: -XX:+<属性名> 表示启用某个属性; -XX:-<属性名> 表示禁用某个属性; (注意加号表示启用,减号表示禁用)
      • 例子: -XX:+DisableExplicitGC 表示禁用手动的GC操作,即代码中手动调用System.gc()无效;
  • 非boolean类型:
    • 格式: -XX:= 表示将某个属性name的值设置为value
      • 例子: -XX:NewRatio=1 表示新生代和老年代的比值

(1)-Xms与-Xmx参数(属于-XX参数类型)

这两个参数分别是设置JVM堆内存的初始大小和最大大小

  • -Xms512m 等价于 -XX:InitialHeapSize=512m, 表示设置初始堆内存为512M;
  • -Xmx2048m 等价于 -XX:MaxHeapSize=2048m, 表示设置最大堆内存为2048M;

(2)-XX:+PrintFlagsFinal

-XX:+PrintFlagsFinal 在运行java程序的时候将所有的参数打印出来.

(3)-verbose:gc

表示输出虚拟机中GC的详细情况

(4)-Xss128k

表示可以设置虚拟机栈的大小为128k

(5)-Xoss128k

表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚拟机栈和本地方法栈,因此对于HotSpot来说这个参数是无效的

(6)-XX:PermSize=10M

表示JVM初始分配的永久代(方法区)的容量,必须以M为单位

(7)-XX:MaxPermSize=10M

表示JVM允许分配的永久代(方法区)的最大容量,必须以M为单位,大部分情况下这个参数默认为64M

(8)-Xnoclassgc

表示关闭JVM对类的垃圾回收

(9)-XX:+TraceClassLoading

表示查看类的加载信息

(10)-XX:+TraceClassUnLoading

表示查看类的卸载信息

(11)-XX:NewRatio=4

表示设置 年轻代(包括Eden和两个Survivor区)/老年代 的大小比值为1:4,这意味着年轻代占整个堆的1/5

**(12)-XX:SurvivorRatio=**8

表示设置2个Survivor区:1个Eden区的大小比值为2:8,这意味着Survivor区占整个年轻代的1/5,这个参数默认为8

(13)-Xmn20M

表示设置年轻代的大小为20M

(14)-XX:+HeapDumpOnOutOfMemoryError

表示可以让虚拟机在出现内存溢出异常时Dump出当前的堆内存转储快照

(15)-XX:+UseG1GC

表示让JVM使用G1垃圾收集器

(16)-XX:+PrintGCDetails

表示在控制台上打印出GC具体细节

(17)-XX:+PrintGC

表示在控制台上打印出GC信息

(18)-XX:PretenureSizeThreshold=3145728

表示对象大于3145728(3M)时直接进入老年代分配,这里只能以字节作为单位

(19)-XX:MaxTenuringThreshold=1

表示对象年龄大于1,自动进入老年代,如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代被回收的概率。

(20)-XX:CompileThreshold=1000

表示一个方法被调用1000次之后,会被认为是热点代码,并触发即时编译

(21)-XX:+PrintHeapAtGC

表示可以看到每次GC前后堆内存布局

(22)-XX:+PrintTLAB

表示可以看到TLAB的使用情况

(23)-XX:+UseSpining

开启自旋锁

(24)-XX:PreBlockSpin

更改自旋锁的自旋次数,使用这个参数必须先开启自旋锁

(25)-XX:+UseSerialGC

表示使用jvm的串行垃圾回收机制,该机制适用于丹cpu的环境下

(26)-XX:+UseParallelGC

表示使用jvm的并行垃圾回收机制,该机制适合用于多cpu机制,同时对响应时间无强硬要求的环境下,使用-XX:ParallelGCThreads=设置并行垃圾回收的线程数,此值可以设置与机器处理器数量相等。

(27)-XX:+UseParallelOldGC

表示年老代使用并行的垃圾回收机制

(28)-XX:+UseConcMarkSweepGC

表示使用并发模式的垃圾回收机制,该模式适用于对响应时间要求高,具有多cpu的环境下

(29)-XX:MaxGCPauseMillis=100

设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

(30)-XX:+UseAdaptiveSizePolicy

设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低响应时间或者收集频率等,此值建议使用并行收集器时,一直打开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

莽晨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值