JVM 命令指北(1)-参数大全

mac2026-08-04  19

文章目录

1. JVM 的启动模式1.1 -server 与 -client 参数1.2 执行模式1.2.1 解释执行与编译执行1.2.2 参数 -Xint、-Xcomp、-Xmixed 2. JVM 主要参数2.1 -X 参数2.2 -XX 参数2.2.1 性能相关参数2.2.2 调试相关参数2.2.3 辅助信息相关参数Refer G1 相关参数

1. JVM 的启动模式

1.1 -server 与 -client 参数

参数-server 指定JVM 以服务器模式启动,-client则为客户端模式,其主要区别如下:

Client VM 初始堆空间会小一些,使用串行的垃圾回收器,其目标是让JVM的启动速度更快,但运行速度会比Server VM模式慢,默认使用轻量级的c1编译器。c1 采用的优化手段比较简单,因此编译的时间较短

Server VM 的初始堆空间会大一些,默认使用并行垃圾回收器,启动慢运行快,默认使用相对重量级的c2 编译器。c2 采用的优化手段复杂,因此编译时间长,但是在运行过程中性能更好

JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的JVM

- 32位操作系统 - Windows系统,不论硬件配置如何,都默认使用Client类型的JVM - 其他操作系统上,机器配置有2GB以上的内存同时有2个以上CPU则默认使用server模式,否则使用client模式 - 64位操作系统 - 只有server类型,不支持client类型

1.2 执行模式

1.2.1 解释执行与编译执行

解释执行 将编译好的字节码一行一行地翻译为机器码执行,优势在于不用等待编译执行 以方法为单位,将字节码一次性翻译为机器码后执行,实际运行当中效率更高

1.2.2 参数 -Xint、-Xcomp、-Xmixed

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

-Xcomp 编译模式(compile mode) JVM在第一次使用时会把所有的字节码编译成机器码,从而带来最大程度的优化。不过使用 -Xcomp 也会有一些性能损失,因为该模式没有让JVM启用JIT编译器的全部功能。JIT编译器可以对代码是否需要编译做判断,如果某些代码只执行一次,那就没必要对其进行编译

-Xmixed 混合模式(mixed mode) 将解释模式与编译模式进行混合使用,由JVM自行决定采用哪种,是JVM默认的模式,也是推荐使用的模式

2. JVM 主要参数

JVM 的参数类型分为三类,分别是 :

标准参数 -help,-version-X参数(非标准参数) -Xint,-Xcomp-XX参数(使用率较高) -XX:newSize,-XX:+UseSerialGC

2.1 -X 参数

安装 JDK 后在终端中使用命令 java -X 即可查看部分虚拟机参数,某些参数与操作系统相关

参数功能-Xmixed混合模式执行 (默认)-Xint仅解释模式执行-Xbootclasspath设置搜索路径以引导类和资源-Xdiag显示附加诊断消息-Xnoclassgc禁用类垃圾收集-Xincgc启用增量垃圾收集-Xverify:none关闭字节码文件验证,有风险-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:all显示所有设置并继续-XshowSettings:vm显示所有与 vm 相关的设置并继续-XshowSettings:properties显示所有属性设置并继续-XshowSettings:locale显示所有与区域设置相关的设置并继续

2.2 -XX 参数

-XX 参数主要用于 JVM 的调优和 debug 操作,通常在 JVM 启动时指定或者写在 JVM 的配置文件里,无法在终端直接使用。其命令格式有2种,一种是行为类型,一种是属性设置类型:

行为类型 格式 :-XX:[ + -]< name > 表示启用禁用属性 如 -XX:+DisableExplicitGC启用禁止手动调用gc操作,也就是调用System.gc()无效属性设置类型 格式 :-XX:< name >=< value > 表示设置< name >属性值为< value > 如 -XX:NewRatio=1 表示设置老年代和新生代的内存比值

2.2.1 性能相关参数

参数及其默认值功能-XX:LargePageSizeInBytes=4m设置用于Java堆的大页面尺寸-XX:MaxHeapFreeRatio=70GC后java堆中空闲量占的最大比例-XX:+AggressiveOpts加快编译-XX:+UseBiasedLocking锁机制的性能改善-XX:PretenureSizeThreshold对象超过多大时直接在老年代分配-XX:MaxPermSize=64m永久代对象能占用内存的最大值,Java 8 及以后被废弃-XX:MinHeapFreeRatio=40GC后java堆中空闲量占的最小比例-XX:NewRatio=4设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5-XX:SurvivorRatio=8设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10-XX:NewSize=2.5m新生代对象生成时占用内存的默认值-XX:ReservedCodeCacheSize=32m保留代码占用的内存容量-XX:ThreadStackSize=512设置线程栈大小,若为0则使用系统默认值,单位 KB-XX:+UseLargePages使用大页面内存-XX:MaxTenuringThreshold=15对象晋升老年代的年龄阀值-XX:HandlePromotionFailure=true允许空间分配担保失败-XX:MaxDirectMemorySize=32m最大直接内存-XX:MaxMetaspaceSize=128m最大元空间内存

2.2.2 调试相关参数

参数及其默认值功能-XX:+CITime打印消耗在JIT编译的时间-XX:ErrorFile=./hs_err_pid< pid >.log保存错误日志或者数据到文件中-XX:+ExtendedDTraceProbes开启solaris特有的dtrace探针-XX:HeapDumpPath=./java_pid< pid >.hprof指定导出堆信息时的路径或文件名-XX:+HeapDumpOnOutOfMemoryError当首次遭遇OOM时导出此时堆中相关信息-XX:OnError="< cmd args>;< cmd args>"出现致命ERROR之后运行自定义命令-XX:OnOutOfMemoryError="< cmd args>;< cmd args>"当首次遭遇OOM时执行自定义命令-XX:+PrintClassHistogram遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同-XX:+PrintConcurrentLocks遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同-XX:+PrintCommandLineFlags打印在命令行中出现过的标记-XX:+PrintCompilation当一个方法被编译时打印相关信息-XX:+TraceClassLoading跟踪类的加载信息-XX:+TraceClassLoadingPreorder跟踪被引用到的所有类的加载信息-XX:+TraceClassResolution跟踪常量池-XX:+TraceClassUnloading跟踪类的卸载信息-XX:+TraceLoaderConstraints跟踪类加载器约束的相关信息

2.2.3 辅助信息相关参数

参数功能输出式例-XX:+PrintGC输出GC信息[GC 118250K->113543K(130112K), 0.0094143 secs]-XX:+PrintGCDetails输出GC详细信息[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]-XX:+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:+PrintTLAB查看TLAB空间的使用情况XX:+PrintTenuringDistribution查看每次minor GC后新的对象存活周期的阈值Desired survivor size 1048576 bytes, new threshold 7 (max 15),new threshold 7即标识新的对象存活周期的阈值为7

Refer G1 相关参数

参数功能-XX:+UseG1GC启用 G1 垃圾收集器-XX:G1HeapRegionSize指定分区大小(1MB~32MB,且必须是2的幂),默认将整堆划分为2048个分区-XX:GCTimeRatio吞吐量大小,0-100的整数(默认9),值为n则系统将花费不超过1/(1+n)的时间用于垃圾收集-XX:MaxGCPauseMillis目标暂停时间(默认200ms),如显式配置了新生代大小或者老年代与新生代的内存比值,该参数将失效-XX:G1NewSizePercent新生代内存初始空间(默认整堆5%)-XX:G1MaxNewSizePercent新生代内存最大空间-XX:TargetSurvivorRatio:Survivor填充容量(默认50%)-XX:InitiatingHeapOccupancyPercen老年代占用空间超过整堆比IHOP阈值(默认45%),超过则执行混合收集-XX:G1HeapWastePercent堆垃圾百分比(默认5%)-XX:G1MixedGCCountTarget = 8设置在标记周期完成之后混合收集的次数(默认为8),以维持old region(也就是老年代)中,最多有G1MixedGCLiveThresholdPercent的存活对象。-XX:G1OldCSetRegionThresholdPercent = 10设置在一次混合收集中被收集的old region数量的上限,默认值是整个堆的10%-XX:G1ReservePercent = 10设置预留空闲内存百分比,以降低内存溢出的风险。默认值为10%-XX:+UseStringDeduplication从内存中删除重复的字符串对象,参考
最新回复(0)