Java虚拟机之JVM启动参数大全

说明

本文所有的参数是基于JDK7的HotSpot虚拟机,适用于JDK7及以前版本,JDK7后续版本参数是否有效请自测。

对于启用或关闭功能选项:-XX:+<option>打开某功能;-XX:-<option>关闭某功能;

对于数字型选项:-XX:<option>=<number>,若需要表示大小,可在数字后添加k、m、g;

对于字符串选项:-XX:<option>=<string>,用于指定文件,路径或命令列表;

参数列表

功能选项

参数与默认值 描述
-XX:-AllowUserSignalHandlers 允许使用用户自定义的信号处理器 (只对应Solaris和Linux)
-XX:AltStackSize=16384 修改栈容量 (单位 Kb) (对应Solaris, JDK 5.0以后弃用)
-XX:-DisableExplicitGC 禁止手动调用System.gc()
-XX:+FailOverToOldVerifier 如果新的类型校验器验证失败使用旧版本的类型校验器 (开始于JDK6.)
-XX:+HandlePromotionFailure 关闭新生代收集担保(java5以前是默认不启用,java6默认启用)
-XX:+MaxFDLimit 将文件描述符加到最大 (对应Solaris)
-XX:PreBlockSpin=10 控制多线程自旋锁优化的自旋次数
-XX:-RelaxAccessControlCheck 放宽类型校验机的准入控制(JDK6)
-XX:+ScavengeBeforeFullGC 在full GC之前先做年轻代GC (开始于JDK1.4.1.)
-XX:+UseAltSigs 为了防止与其他发送信号的应用程序冲突,允许使用候补信号替代 SIGUSR1和SIGUSR2(限于Solaris)
-XX:+UseBoundThreads 绑定所有的用户线程到内核线程, 减少线程进入饥饿状态(得不到任何cpu time)的次数(限于Solaris)
-XX:-UseConcMarkSweepGC 使用并发的mark-sweep GC收集年老代 (始于JDK1.4.1)
-XX:+UseGCOverheadLimit 使用一种限制VM做GC操作的时间所占比例过高的策略 (始于JDK6.)
-XX:+UseLWPSynchronization 使用轻量级进程同步替代线程同步 (始于JDK1.4.0. Solaris相关)
-XX:-UseParallelGC 使用并发平行GC(始于JDK1.4.1)
-XX:-UseParallelOldGC 使用并发平行GC做 full GC. (始于JDK5.0 update 6.)
-XX:-UseSerialGC 使用串行GC (始于JDK5.0.)
-XX:-UseSpinning 启用多线程自旋锁优化(java1.4.2和1.5需要手动启用)
-XX:+UseTLAB 启用线程本地缓存区(1.4.2以前和使用-client选项时,默认不启用,其余版本默认启用)
-XX:+UseSplitVerifier 使用新的Class类型校验器(java5默认不启用, java6默认启用)
-XX:+UseThreadPriorities 使用本地线程的优先级
-XX:+UseVMInterruptibleIO 在solaris中,允许运行时中断线程(限于solaris)

G1垃圾收集器选项

参数与默认值 描述
-XX:+UseG1GC 使用G1垃圾处理器
-XX:MaxGCPauseMillis=n 设置并行收集最大暂停时间,这是一个理想目标,JVM将尽最大努力来实现它
-XX:InitiatingHeapOccupancyPercent=n 启动一个并发垃圾收集周期所需要达到的整堆占用比例。这个比例是指整个堆的占用比例而不是某一个代(例如G1),如果这个值是0则代表‘持续做GC’。默认值是45
-XX:NewRatio=n 设置年轻代和年老代的比值。例如:值为3,则表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n 年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxTenuringThreshold=n 设置垃圾最大存活阀值。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论
-XX:ParallelGCThreads=n 配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等
-XX:ConcGCThreads=n 并发垃圾收集器线程数
-XX:G1ReservePercent=n 设置保留用来做假天花板以减少晋升(新生代对象晋升到老生代)失败可能性的堆数目
-XX:G1HeapRegionSize=n 使用G1垃圾回收器,java堆被划分成统一大小的区块。这个选项设置每个区块的大小。最小值是1Mb,最大值是32Mb

性能选项

参数与默认值 描述
-XX:+AggressiveOpts 启用JVM开发团队最新的调优成果。例如编译优化,偏向锁,并行年老代收集等(JDK 5 update 6后引入,但需要手动启用, JDK6默认启用)
-XX:CompileThreshold=10000 通过JIT编译器,将方法编译成机器码的触发阀值,可以理解为调用方法的次数,例如调1000次,将方法编译为机器码
-XX:LargePageSizeInBytes=4m 设置堆内存的内存页大小
-XX:MaxHeapFreeRatio=70 GC后,如果发现空闲堆内存占到整个预估上限值的70%,则收缩预估上限值
-XX:MaxNewSize=size 新生代占整个堆内存的最大值
-XX:MaxPermSize=64m Perm(俗称方法区)占整个堆内存的最大值
-XX:MinHeapFreeRatio=40 GC后,如果发现空闲堆内存占到整个预估上限值的40%,则增大上限值
-XX:NewRatio=2 新生代和年老代的堆内存占用比例, 例如2表示新生代占年老代的1/2,占整个堆内存的1/3
-XX:NewSize=2m 新生代预估上限的默认值
-XX:ReservedCodeCacheSize=32m 设置代码缓存的最大值,编译时用
-XX:SurvivorRatio=8 Eden与Survivor的占用比例
-XX:TargetSurvivorRatio=50 实际使用的survivor空间大小占比。默认是50%,最高90%
-XX:ThreadStackSize=512 线程堆栈大小
-XX:+UseBiasedLocking 启用偏向锁
-XX:+UseFastAccessorMethods 优化原始类型的getter方法性能(get/set:Primitive Type)
-XX:-UseISM 启用solaris的ISM
-XX:+UseLargePages 启用大内存分页
-XX:+UseMPSS 启用solaris的MPSS,不能与ISM同时使用
-XX:+UseStringCache 启用缓存常用的字符串
-XX:AllocatePrefetchLines=1 在使用JIT生成的预读取指令分配对象后读取的缓存行数。如果上次分配的对象是一个实例则默认值是1,如果是一个数组则是3
-XX:AllocatePrefetchStyle=1 预读取指令的生成代码风格0- 无预读取指令生成 1-在每次分配后执行预读取命令 2-当预读取指令执行后使用TLAB()分配水印指针来找回入口
-XX:+UseCompressedStrings 其中,对于不需要16位字符的字符串,可以使用byte[] 而非char[]。对于许多应用,这可以节省内存,但速度较慢(5%-10%)
-XX:+OptimizeStringConcat 优化字符串连接操作在可能的情况下

调试选项

参数与默认值 描述
-XX:-CITime 打印发费在JIT编译上的时间
-XX:ErrorFile=./hs_err_pid<pid>.log 错误文件
-XX:-ExtendedDTraceProbes 启用性能的影响DTrace探测器
-XX:HeapDumpPath=./java_pid<pid>.hprof 指定HeapDump的文件路径或目录
-XX:-HeapDumpOnOutOfMemoryError 当抛出OOM时进行HeapDump
-XX:OnError="<cmd args>;<cmd args>" 当发生错误时执行用户指定的命令
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>" 当发生OOM时执行用户指定的命令
-XX:-PrintClassHistogram 当Ctrl+Break发生时打印Class实例信息,与jmap -histo相同
-XX:-PrintConcurrentLocks 当Ctrl+Break发生时打印java.util.concurrent的锁信息, 与jstack -l相同
-XX:-PrintCommandLineFlags 打印命令行上的标记
-XX:-PrintCompilation 当方法被编译时打印信息
-XX:-PrintGC 当GC发生时打印信息
-XX:-PrintGCDetails 打印GC详细信息
-XX:-PrintGCTimeStamps 打印GC用时
-XX:-PrintTenuringDistribution 打印Tenuring年龄信息
-XX:-PrintAdaptiveSizePolicy 打印自适应调整
-XX:-TraceClassLoading 跟踪类加载
-XX:-TraceClassLoadingPreorder 跟踪所有加载的引用类
-XX:-TraceClassResolution 跟踪常量池的变化
-XX:-TraceClassUnloading 跟踪类的卸载
-XX:-TraceLoaderConstraints 打印class的装载策略变化信息到stdout。
-XX:+PerfDataSaveToFile 退出时保存jvmstat二进制文件
-XX:ParallelGCThreads=n 设置新生代与老年代并行垃圾回收器的线程数
-XX:+UseCompressedOops 使用compressed pointers。这个参数默认在64bit的环境下默认启动,但是如果JVM的内存达到32G后,这个参数就会默认为不启动,因为32G内存后,压缩就没有多大必要了,要管理那么大的内存指针也需要很大的宽度了
-XX:+AlwaysPreTouch 在JVM 初始化时预先对Java堆进行摸底
-XX:AllocatePrefetchDistance=n 为对象分配设置预取距离
-XX:InlineSmallCode=n 当编译的代码小于指定的值时,内联编译的代码
-XX:MaxInlineSize=35 内联方法的最大字节数
-XX:FreqInlineSize=n 内联频繁执行的方法的最大字节码大小
-XX:LoopUnrollLimit=n 代表节点数目小于给定值时打开循环体
-XX:InitialTenuringThreshold=7 设置初始的对象在新生代中最大存活次数
-XX:MaxTenuringThreshold=n 设置对象在新生代中最大的存活次数,最大值15,并行回收机制默认为15,CMS默认为4
-Xloggc:<filename> 输出GC详细日志信息至指定文件
-XX:-UseGCLogFileRotation 开启GC日志文件切分功能,前置选项 -Xloggc
-XX:NumberOfGClogFiles=1 设置切分GC日志文件数量,文件命名格式:.0, .1, ..., .n-1
-XX:GCLogFileSize=8K GC日志文件切分大小

参考文献

HotSpot官方文档

posted @ 2020-11-04 22:25  Sirius-  阅读(590)  评论(0编辑  收藏  举报