JVM基本参数详解

本文详细解析了JVM的启动参数,包括堆大小配置、收集器选择,如并行收集器与并发收集器,并提供了丰富的示例,如设置-Xms、-Xmx、-XX:UseParallelGC等,帮助理解JVM参数对性能的影响。

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

1、启动参数分类

标准解释方法
标准参数(-)所有的JVM实现都必须实现这些参数的功能,而且向后兼容cmd中输入”java -help”或者”java -?”可查看
非标准参数(-X)默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容”java -X”可以输出非标准参数列表
非稳定参数(-XX)此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使java -XX:+PrintFlagsInitial -XX:+PrintFlagsInitial

了解三类启动参数详细内容

2、参数配置详解

参考文章:Java虚拟机-JVM各种参数配置大全详细

2.1 堆大小配置

参数解释
-Xmx4g设置JVM最大可用内存为4g(默认为物理内存的1/4)
-Xms4g设置JVM初始内存为4g。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存(默认为物理内存的1/64)
-Xmn2g设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小 。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8,在JDK1.4版本以后才使用的
-Xss128k设置每个线程的栈大小,JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K
-XX:NewRatio=4设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5,(默认为2)
-XX:SurvivorRatio=4默认为8,设置年轻代中Eden区与Survivor区(即:From幸存区和To幸存区)的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m设置持久代大小为16m,(jdk7及之前存在)
-XX:MaxTenuringThreshold=0设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代 。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间 ,增加在年轻代即被回收的概论
-XX:MaxMetaspaceSize=512m设置元数据空间最大值,(jdk8及之后)
-XX:MetaspaceSize=1m指Metaspace扩容时触发FullGC的初始化阈值
-XX:+UseAdaptiveSizePolicyJDK 1.8 默认使用 UseParallelGC 垃圾回收器,该垃圾回收器默认启动了 AdaptiveSizePolicy,会根据GC的情况自动计算计算 Eden、From 和 To 区的大小
-XX:-UseAdaptiveSizePolicy同上,关闭(面向外部的大流量、低延迟系统,不建议启用此参数,建议关闭该参数)
-XX:+UseGCOverheadLimit关闭GC Overhead limit exceeded异常,但治标不治本

2.2 收集器选择

JVM提供了三种收集器:串行收集器、并行收集器、并发收集器;串行收集器只适用于小数据量的情况,不做讲解。

2.2.1吞吐量优先的并行收集器

参数解释
-XX:+UseParallelGC选择垃圾收集器为并行收集器
-XX:+UseParallelOldGC配置年老代垃圾收集方式为并行收集
-XX:MaxGCPauseMillis=100设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。
-XX:+UseAdaptiveSizePolicy设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开

2.2.1响应时间优先的并发收集器

参数解释
-XX:+UseConcMarkSweepGC设置年老代为并发收集
-XX:+UseParNewGC设置年轻代为并行收集
-XX:CMSFullGCsBeforeCompaction=5由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理
-XX:+UseCMSCompactAtFullCollection打开对年老代的压缩。可能会影响性能,但是可以消除碎片

2.3辅助配置

参数解释
-XX:+PrintGC输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
-XX:+PrintGCTimeStamps可与上面两个混合使用,输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用;输出形式:Application time: 0.5291524 seconds
XX:+PrintGCApplicationStoppedTime打印垃圾回收期间程序暂停的时间。可与上面混合使用;输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC打印GC前后的详细堆栈信息
-Xloggc:filename与上面几个配合使用,把相关日志信息记录到文件以便分析。

3、示例

java -jar
-Xms2048m
-Xmx2048m
-Xss500k
-XX:NewRatio=1
-XX:SurvivorRatio=6
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-XX:-UseAdaptiveSizePolicy

-XX:+UseParallelGC
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintHeapAtGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/
-Xloggc:/log/tmp/gc_%p_%t_.log

-Dfile.encoding=UTF-8
-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.port=11111
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.managementote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false test.jar > test.log

三部分,1、基本配置;2、辅助配置;3、辅助监控(jvisualvm)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值