JVM常用的参数

本文详细介绍了JVM的参数类型,包括标准参数、非标准参数(-X)和非Stable参数(-XX),并列举了各类参数的详细作用。标准参数如-d32、-server、-cp等用于设置JVM环境,非标准参数如-Xms、-Xmx用于调整内存分配,非Stable参数涉及更具体的性能调优选项,如年轻代与年老代的比例、堆大小等。理解并合理设置这些参数对优化Java应用程序的性能至关重要。
摘要由CSDN通过智能技术生成

        jvm是java的运行环境,在jvm中有很多的参数可以进行设置,合理的设置参数可以让jvm在各种环境中都能够高效的运行,对于我们开发者而言,jvm的绝大部分参数保持默认即可,不需要我们手动的更改,但是了解jvm支持的参数及功能也对我们往后的开发至关重要。

一、前言

jvm的参数类型主要有一下三种:

  • 标准参数:jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help检索出所有的标准参数;
  • 非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
  • 非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用。

按照参数类型可以分成以下三种:

  • 布尔型参数选项:-XX:+ 打开, -XX:- 关闭;
  • 数字型参数选项通过-XX:=设定;
  • 字符行参数选项通过-XX:=设定,通常用来指定一个文件,路径,或者一个命令列表。

二、标准参数

如果需要获取标准参数详细说明,可以按照如下方法:

列出标准参数:java -help

详细参数及作用如下:

-d32使用 32 位数据模型 (如果可用)
-d64使用 64 位数据模型 (如果可用)
-server选择 "server" VM,默认 VM 是 server.
-cp<目录和 zip/jar 文件的类搜索路径> -classpath<目录和 zip/jar 文件的类搜索路径>用 ; 分隔的目录, JAR 档案和 ZIP 档案列表, 用于搜索类文件。
     
-D<名称>=<值>设置系统属性
-verbose:[class|gc|jni]启用详细输出
-version输出产品版本并退出
-version:<值>警告: 此功能已过时, 将在未来发行版中删除。需要指定的版本才能运行
-showversion输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search警告: 此功能已过时, 将在未来发行版中删除。在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions启用系统断言
-dsa | -disablesystemassertions禁用系统断言
-agentlib:<libname>[=<选项>]加载本机代理库 <libname>, 例如 -agentlib:hprof另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>使用指定的图像显示启动屏幕有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。

三、非标准参数 

列出非标准参数:java -X

详细参数及作用如下:

-Xmixed混合模式执行(默认)
-Xint仅解释模式执行
-Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>设置引导类和资源的搜索路径
-Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>附加在引导类路径末尾
-Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>置于引导类路径之前
-Xdiag显示附加诊断消息
-Xnoclassgc禁用类垃圾收集
-Xincgc启用增量垃圾收集
-Xloggc:<file>将 GC 状态记录在文件中(带时间戳)
-Xbatch禁用后台编译
-Xms<size>设置初始 Java 堆大小
-Xmx<size>设置最大 Java 堆大小
-Xss<size>设置 Java 线程堆栈大小
-Xprof输出 cpu 分析数据
-Xfuture启用最严格的检查,预计会成为将来的默认值
-Xrs减少 Java/VM 对操作系统信号的使用(请参阅文档)
-Xcheck:jni对 JNI 函数执行其他检查
-Xshare:off不尝试使用共享类数据
-Xshare:auto在可能的情况下使用共享类数据(默认)
-Xshare:on要求使用共享类数据,否则将失败。
-XshowSettings显示所有设置并继续
-XshowSettings:system仅限 Linux)显示系统或容器配置并继续
-XshowSettings:all显示所有设置并继续
-XshowSettings:vm显示所有与 vm 相关的设置并继续
-XshowSettings:properties显示所有属性设置并继续
-XshowSettings:locale显示所有与区域设置相关的设置并继续

注意:-X 选项是非标准选项。如有更改,恕不另行通知。 

 四、非Stable参数

参数名称含义默认值备注
-Xms初始堆大小物理内存的1/64(<1GB)默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.
-Xmx最大堆大小物理内存的1/4(<1GB)默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn年轻代大小(1.4or lator)注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:NewSize设置年轻代大小(for 1.3/1.4)
-XX:MaxNewSize年轻代最大值(for 1.3/1.4)
-XX:PermSize设置持久代(perm gen)初始值物理内存的1/64
-XX:MaxPermSize设置持久代最大值物理内存的1/4
-Xss每个线程的堆栈大小JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右 一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。(校长) 和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"” -Xss is translated in a VM flag named ThreadStackSize” 一般设置这个值就可以了。
-XX:ThreadStackSizeThread Stack Size线程栈的大小,JDK5.0以后每个线程堆栈大小默认为1M,以前每个线程堆栈大小为256K;可以通过jvm参数-Xss来设置;注意-Xss是jvm的非标准参数,不强制所有平台的jvm都支持
-XX:NewRatio年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。
-XX:SurvivorRatioEden区与Survivor区的大小比值设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:LargePageSizeInBytes内存页的大小不可设置过大, 会影响Perm的大小=128m
-XX:+UseFastAccessorMethods原始类型的快速优化
-XX:+DisableExplicitGC关闭System.gc()这个参数需要严格的测试
-XX:MaxTenuringThreshold垃圾最大年龄如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率 该参数只有在串行GC时才有效.
-XX:+AggressiveOpts加快编译
-XX:+UseBiasedLocking锁机制的性能改善
-Xnoclassgc禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB每兆堆空闲空间中SoftReference的存活时间1s每兆堆空闲空间中SoftReference的存活时间
-XX:PretenureSizeThreshold对象超过多大是直接在旧生代分配0单位字节 新生代采用Parallel Scavenge GC时无效 另一种直接在旧生代分配的情况是大的数组对象,且数组中无外部引用对象.
-XX:TLABWasteTargetPercentTLAB占eden区的百分比1%
-XX:+CollectGen0FirstFullGC时是否先YGCFALSE

 五、并行收集器相关参数

参数名称含义默认值备注
-XX:+UseParallelGCFull GC采用parallel MSC (此项待验证)选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.(此项待验证)
-XX:+UseParNewGC设置年轻代为并行收集可与CMS收集同时使用 JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值
-XX:ParallelGCThreads并行收集器的线程数此值最好配置与处理器数目相等 同样适用于CMS
-XX:+UseParallelOldGC年老代垃圾收集方式为并行收集(Parallel Compacting)这个是JAVA 6出现的参数选项
-XX:MaxGCPauseMillis每次年轻代垃圾回收的最长时间(最大暂停时间)如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值.
-XX:+UseAdaptiveSizePolicy自动选择年轻代区大小和相应的Survivor区比例设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开.
-XX:GCTimeRatio设置垃圾回收时间占程序运行时间的百分比公式为1/(1+n)
-XX:+ScavengeBeforeFullGCFull GC前调用YGCTRUEFull GC前调用 年轻代GC

 六、辅助参数

参数名称含义默认值备注
-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] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps
-XX:+PrintGC:PrintGCTimeStamps可与-XX:+PrintGC -XX:+PrintGCDetails混合使用 输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationStoppedTime打印垃圾回收期间程序暂停的时间.可与上面混合使用输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,程序未中断的执行时间.可与上面混合使用输出形式:Application time: 0.5291524 seconds
-XX:+PrintHeapAtGC打印GC前后的详细堆栈信息
-Xloggc:filename把相关日志信息记录到文件以便分析. 与上面几个配合使用
-XX:+PrintClassHistogramgarbage collects before printing the histogram.
-XX:+PrintTLAB查看TLAB空间的使用情况
XX:+PrintTenuringDistribution查看每次minor GC后新的存活周期的阈值Desired survivor size 1048576 bytes, new threshold 7 (max 15) new threshold 7即标识新的存活周期的阈值为7。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值