空间
通用
参数 |
常用 |
说明 |
备注 |
-Xms<size><unit> |
● |
Heap 初始化的大小 |
|
-Xmx<size><unit> |
● |
Heap 最大值 |
|
-Xmn<size><unit> |
● |
新生代的大小 |
G1 GC 下建议不设置该参数 |
-Xss<size><unit> |
● |
线程栈的大小,默认 1M |
|
-XX:MaxDirectMemorySize=<size><unit> |
|
设置 NIO 的直接缓存最大容量 |
|
-XX:SurvivorRatio=<size> |
● |
Eden 和 Survior(from和to) 大小比例,默认是 8 |
|
-XX:AutoBoxCacheMax=<size> |
|
设置自动装箱池缓存大小 |
server模式专有 |
-XX:+UseAdaptiveGCBoundary |
|
动态化使用资源 |
|
-XX:+UseAdaptiveSizePolicy |
|
动态调整各个代区的内存大小,每次 minor gc 后会重新计算 eden,from 和 to 的大小 |
|
-XX:NewSize=<size><unit> |
|
设置新生代的初始大小 |
|
-XX:MaxNewSize=<size><unit> |
|
设置新生代的最大值 |
|
-XX:NewRatio=<size> |
|
设置新生代和老年代的比例 |
|
-Dsun.reflect.noInflation=<boolean> |
|
反射时是否使用代理类 |
默认 false |
-Dsun.reflect.inflationThreshold=<size> |
|
反射时生成代理类调用的次数,之后使用 JNI 字节码调用 |
默认 15 |
-XX:MaxRAM=<size> |
|
设置最大内存参数 |
|
-XX:MinRAMFraction=<size> |
|
设置最大内存除数,默认为 4,即堆空间内 MaxRAM 的四分之一 |
|
-XX:ErgoHeapSizeLimit=<size> |
|
限制堆内存上限 |
|
Java8之前
参数 |
常用 |
说明 |
备注 |
-XX:PermSize |
● |
方法区的初始化大小 |
java8 后废弃 |
-XX:MaxPermSize |
● |
方法区的最大值 |
java8 后废弃 |
Java8之后
参数 |
常用 |
说明 |
备注 |
-XX:MetaspaceSize=<size><unit> |
● |
元空间的初始化大小 |
java8 后新增 |
-XX:MaxMetaspaceSize=<size><unit> |
● |
元空间的最大值 |
java8 后新增,初始大小是 21M |
Java9之后
参数 |
常用 |
说明 |
备注 |
-XX:G1HeapRegionSize=<size><unit> |
● |
设置每个区域块大小 |
1M-32M 之间,必须是2的幂 |
-XX:G1NewSizePercent=<size> |
|
设置年轻代大小占堆的最小值百分比 |
默认值是 Java 堆的 5% |
-XX:G1MaxNewSizePercent=<size> |
|
设置年轻代大小占堆的最大值百分比 |
默认值是 Java 堆的 60% |
性能
通用
参数 |
常用 |
说明 |
备注 |
-server |
● |
虚拟机会以 server 模式运行,该模式与 C2 编译器共同运行,更注重编译的质量,启动速度慢,但是运行效率高,适合用在服务器环境下,针对生产环境进行了优化 |
|
-XX:+AlwaysPreTouch |
● |
JVM 启动时就会先访问所有分配给它的内存,让操作系统把内存真正的分配给JVM |
|
-XX:+UseTLAB |
● |
通过快速对象分配模式在 TLAB(Thread-local allocation buffers)中进行分配对象 |
以避免大量的线程通信所导致的性能下降 |
-XX:TLABSize=<size> |
|
设置 TLAB 的初始化大小 |
|
-XX:-ResizeTLAB |
|
禁用自动调整 TLAB |
|
-XX:+UseLargePages |
|
使用最大值内存页 |
需要 Linux kernel >= 4.7 |
-XX:+UseTransparentHugePages |
● |
对大对象分配使用大内存页分配 |
需要 Linux kernel >= 4.7 |
-XX:+UseNUMA |
● |
对象分配优先使用 NUMA 本地内存 |
|
-XX:+PerfDisableSharedMem |
● |
GC 日志指向 /dev/shm,避免 IO 造成的 JVM 停顿 |
|
-XX:-OmitStackTraceInFastThrow |
● |
强制要求 JVM 始终抛出含堆栈的异常 |
|
-XX:+ShowHiddenFrames |
|
展示虚拟机隐藏的栈信息 |
|
-XX:ObjectAlignmentInBytes=<size> |
|
设置 java 对象的内存对齐,默认是 8 字节,指定的值必须是 2 的幂次,且必须在 8 和 256 之间 |
|
-XX:+PageAlignDirectMemory |
|
设置堆外内存使用内存对齐 |
|
-XX:+UseCompressedOops |
● |
在 64 位环境下,压缩对象头 |
|
-XX:+UseFastAccessorMethods |
|
原始类型的快速优化 |
|
-XX:+UseFastEmptyMethods |
|
空方法优化 |
|
-XX:+UseFastJNIAccessors |
|
引用类或 int 的成员方法优化 |
|
-XX:LargePageSizeInBytes=<size><unit> |
|
Heap 中内存页的最大值,参数必须是 2 的幂,不可设置过大 |
|
-XX:-UseBiasedLocking |
|
禁用偏向锁 |
在存在大量锁对象的创建并高度并发的环境下禁用偏向锁能够带来一定的性能优化 |
-XX:BiasedLockingStartupDelay=<size> |
|
|
延迟(秒钟)启用偏向锁 |
-XXtlaSize:min=<size><unit> ,preferred=<size><unit> |
|
调整 TLA,每个线程私有的空间的默认最小大小和默认首选大小 |
|
-XX:+AlwaysAtomicAccesses |
|
实现对所有 Access 的原子性保证 |
|
-XX:+EliminateAllocations |
|
开启标量替换 |
|
-XX:+DoEscapeAnalysis |
|
进行逃逸分析之后,创建的可分解的对象都将由栈上分配 |
标量替换,栈上分配,受限于栈的空间大小 |
-XX:+PrintEscapeAnalysis |
|
查看逃逸分析结果 |
|
-XX:+EliminateLocks |
|
分析并且消除无线程竞争下的锁 |
同步消除,必须开启 -XX:+DoEscapeAnalysis 和 -server 模式 |
-XX:+PrintEliminateAllocations |
|
查看标量的替换情况 |
|
-XX:LiveNodeCountInliningCutoff=<size> |
|
max number of live nodes in a method |
|
-XX:+PositiveIdentityHash |
|
只允许分配正数的哈希值 |
|
JIT
参数 |
常用 |
说明 |
备注 |
-XX:+EnableJVMCI |
|
使用 Graal |
java10 |
-XX:+UseJVMCICompiler |
|
启动 Graal JIT编译器 |
java10 |
-XX:+TieredCompilation |
● |
启用分层编译策略,根据编译器编译、优化的规模与耗时,划分出不同的编译层次 |
java8 默认开启 |
-XX:TieredStopAtLevel=<size> |
|
设置 JIT 编译的最高层级 |
|
-XX:+UseCodeCacheFlushing |
● |
当代码缓存被填满时让 JVM 放弃一些编译代码 |
|
-XX:InitialCodeCacheSize=<size> |
|
设置初始代码缓存的大小 |
|
-XX:ReservedCodeCacheSize=<size><unit> |
|
设置代码缓存的最大值 |
|
-XX:CompileThreshold=<size> |
|
当某个方法被调用 + 循环次数累计超过该值时,触发标准的 JIT 编译 |
|
-XX:InterpreterBackwardBranchLimit=<size> |
|
当某个方法被调用 + 循环次数累计超过该值时,触发 OSR 形式的 JIT 编译 |
|
-XX:HugeMethodLimit=<size> |
|
JIT 编译字节码大小超过 size 字节的方法就是巨型方法 |
|
-XX:+DontCompileHugeMethods |
|
不编译巨型方法 |
|
-XX:-UseCounterDecay |
|
禁止 JIT 调用计数器衰减 |
|
-XX:+CompileCommand=command,method[,option] |
|
定制编译需求,比如过滤某个方法不做 JIT 编译 |
|
-XX:+InlineSynchronizedMethods |
|
对同步方法进行内联 |
|
-XX:MaxInlineLevel=<size> |
|
在进行方法内联前,方法的最多嵌套调用次数 |
默认为 9 |
-XX:MaxInlineSize=<size> |
|
内联方法的最大字节码大小 |
默认为 35 |
-XX:FreqInlineSize=<size> |
|
内联 频繁执行 的方法的最大字节码大小 |
默认为 325 |
-XX:MaxTrivialSize=<size> |
|
归属于不重要的方法的最大字节码大小 |
默认为 6 |
-XX:MinInliningThreshold=<size> |
|
方法被内联的最小调用次数 |
默认为 250 |
-XX:MaxRecursiveInlineLevel=<size> |
|
对方法的递归调用做内联优化 |
默认为 1 |
-XX:Tier1MaxInlineSize=<size> |
|
1层内联方法的最大字节码大小 |
默认为 8 |
-XX:Tier1FreqInlineSize=<size> |
|
1层内联 频繁执行 的方法的最大字节码大小 |
默认为 35 |
-XX:LiveNodeCountInliningCutoff=<size> |
|
方法内最大存活的 JIT IR 节点数量 |
默认为 20000 |
Docker
参数 |
常用 |
说明 |
备注 |
-XX:ActiveProcessorCount=<size> |
|
指定 jvm 使用 cpu 个数 |
|
-XX:+UseContainerSupport |
|
支持容器化功能,默认开启 |
|
-XX:+UseCGroupMemoryLimitForHeap |
|
开启 CGroup Namespace |
jdk10 后废弃 |
GC
通用
参数 |
常用 |
说明 |
备注 |
-XX:+UseCompressedClassPointers |
● |
开启压缩类指针 |
64 位平台上默认打开 |
-XX:+UseParNewGC |
● |
设置年轻代为多线程收集 |
可以和 CMS GC 一起使用 |
-XX:+ParallelRefProcEnabled |
● |
并行的处理对象标记过程 |
|
-XX:ParallelGCThreads=<size> |
● |
指定并行处理 GC 的线程数 |
默认 GC 线程数为 CPU 的数量 |
-XX:ParGCCardsPerStrideChunk=<size> |
● |
设置每个线程每次扫描的 Card 数量 |
CardTable 用来标记老年代的某一块内存区域中的对象是否持有新生代对象的引用,卡表的数量取决于老年代的大小和每张卡对应的内存大小 |
-XX:MinHeapFreeRatio=<size> |
|
指定堆内存在使用率以下进行收缩 |
|
-XX:+DisableExplicitGC |
|
禁止代码中显示调用 GC |
CMS 下可使用 -XX:+ExplicitGCInvokesConcurrent 替换 |
-XX:+GCLockerInvokesConcurrent |
|
并发的执行 GC Lock |
|
-XX:ConcGCThreads=<size> |
|
设置并行GC的线程数 |
设置为并行垃圾回收线程数 (ParallelGCThreads) 的 1/4 左右 |
-XX:MaxTenuringThreshold=<size> |
|
设置新生代经过多少次YGC晋升到老生代 |
|
-XX:PretenureSizeThreshold=<size> |
|
晋升老年代对象年龄 |
无默认值,Paralle Scavenge收集器无法识别 |
-XX:CompressedClassSpaceSize=<size><unit> |
|
设置指针压缩空间大小 |
|
-XX:+OptimizeStringConcat |
|
字符串concat优化 |
默认开启 |
-XX:+UseParallelGC |
|
选择垃圾收集器为并行收集器 |
不能和 CMS GC 一起使用,系统吨吐量优先 |
-XX:GCTimeRatio=<size> |
|
设置吞吐量大小 |
|
-XX:SoftRefLRUPolicyMSPerMB=<size> |
|
设置每兆空间中软引用的生命周期 (多少毫秒后清除) |
|
-Xnoclassgc |
|
不对 Class 元数据进行 GC |
|
CMS
参数 |
常用 |
说明 |
备注 |
-XX:+UseConcMarkSweepGC |
● |
启用 CMS 低停顿垃圾收集器 |
|
-XX:+CMSParallelRemarkEnabled |
● |
开启并行标记 |
|
-XX:+ExplicitGCInvokesConcurrent |
● |
命令JVM无论什么时候调用系统 GC,都执行 CMS GC,而不是 Full GC |
|
-XX:+ExplicitGCInvokesConcurrent AndUnloadsClasses |
● |
保证当有系统 GC 调用时,永久代也被包括进 CMS 垃圾回收的范围内 |
|
-XX:+CMSConcurrentMTEnabled |
|
并发的 CMS 阶段将以多线程执行 |
默认开启 |
-XX:+CMSParallelInitialMarkEnabled |
|
开启初始标记过程中的并行化 |
|
-XX:ParallelCMSThreads=<size> |
|
设定 CMS 的线程数量 |
|
-XX:CMSInitiatingOccupancyFraction=<size> |
● |
指定 CMS 老年代在对内存占用率达到多少百分比的时候开始GC |
|
-XX:CMSInitiatingPermOccupancyFraction=<size> |
|
指定 CMS 永久代在对内存占用率达到多少百分比的时候开始GC |
|
-XX:+UseCMSInitiatingOccupancyOnly |
|
只使用 CMSInitiatingOccupancyFraction 设置的回收阈值,否则交由 JVM 动态调整 |
|
-XX:CMSTriggerRatio |
|
当 CMSInitiatingOccupancyFraction 错误时的生成策略 |
|
-XX:+CMSScavengeBeforeRemark |
|
重新标记之前对年轻代做一次 Minor GC |
|
-XX:+CMSClassUnloadingEnabled |
● |
在 CMS GC 时对永久代进行垃圾回收(类卸载) |
在 Full GC 时会扫描 MetaSpace/PermGen |
-XX:CMSFullGCsBeforeCompaction=<size> |
|
指定进行多少次Full GC之后,执行内存空间整理 |
|
-XX:UseCMSCompactAtFullCollection |
|
在 Full GC 的时候,对年老代的压缩 |
可能会影响性能,但是可以消除碎片 |
G1
参数 |
常用 |
说明 |
备注 |
-XX:+UseG1GC |
● |
使用G1垃圾回收器 |
|
-XX:InitiatingHeapOccupancyPercent=<size> |
● |
设置触发并发标记周期时的堆内存占用率阈值. G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比 |
值为 0 则表示一直执行 GC 循环,默认值为 45 |
-XX:+G1UseAdaptiveIHOP |
● |
开启自适应并发标记控制 |
|
-XX:G1ConcRefinementThreads=<size> |
|
设置 Remenbered Set 的工作线程数目 |
|
-XX:MaxGCPauseMillis=<size> |
|
设置每次年轻代垃圾回收的最长时间 |
|
-XX:+UseStringDeduplication |
● |
使用字符串去重机制 |
G1 收集器下生效 |
-XX:G1MixedGCLiveThresholdPercent=<size> |
● |
设置启动混合垃圾回收周期的老年代占用率阈值 |
默认占用率为 65% |
-XX:G1HeapWastePercent=<size> |
● |
设置允许浪费的堆百分比,如果触发回收百分比小于该百分比,JVM 则不会启动混合垃圾回收周期 |
默认值是 10% |
-XX:G1MixedGCCountTarget=<size> |
● |
设置标记周期完成后,执行混合垃圾回收老年代的目标次数 |
默认值是 8 |
-XX:G1OldCSetRegionThresholdPercent=<size> |
● |
设置混合垃圾回收期间要回收的最大旧区域数 |
默认值是 Java 堆的 10% |
-XX:G1ReservePercent=<size> |
|
设置作为预留存活区在 heap 中的百分比 |
默认值是 10% |
-XX:+G1SummarizeConcMark |
|
|
|
-XX:+G1PrintHeapRegions |
|
打印 G1 收集器收集的区域 |
|
-XX:+G1SummarizeRSetStats |
|
打印标记过程引用信息(Print RSet processing information) |
|
-XX:G1SummarizeRSetStatsPeriod=<size> |
|
指定 GC 周期频率报告 |
|
-XX:-G1EagerReclaimHumongousObjects |
|
禁用 G1 优先尝试回收大对象 |
|
-XX:+G1TraceEagerReclaimHumongousObjects |
|
G1 在每个 Young GG 周期都会回收消亡的 Humongous 对象 |
默认开启 |
-XX:+G1ConcRegionFreeingVerbose |
|
Debug JVM |
|
ZGC
参数 |
常用 |
说明 |
备注 |
-XX:+UseZGC |
|
启动 ZGC 垃圾回收器 |
java11,非正式版本需开启 -XX:+UnlockExperimentalVMOptions 解锁参数 |
https://wiki.openjdk.java.net/display/zgc/Main
Shenandoah GC
参数 |
常用 |
说明 |
备注 |
-XX:+UseShenandoahGC |
|
启动 Shenandoah 垃圾回收器 |
jdk12,非正式版本需开启 -XX:+UnlockExperimentalVMOptions 解锁参数 |
-XX:ShenandoahInitFreeThreshold=<size> |
|
设置触发垃圾回收的初始阈值 |
|
-XX:ShenandoahMinFreeThreshold=<size> |
|
无条件触发垃圾回收的最小空间阀值 |
|
-XX:ShenandoahAllocSpikeFactor=<size> |
|
设置预留堆空间百分比 |
|
-XX:ShenandoahGarbageThreshold=<size> |
|
设置一个 Region 被视为 可回收 的垃圾对象所需百分比 |
|
-XX:ShenandoahFreeThreshold=<size> |
|
设置启动垃圾回收的空闲堆空间百分比 |
|
-XX:ShenandoahAllocationThreshold=<size> |
|
设置上一次垃圾回收周期的分配内存百分比 |
|
-XX:+ShenandoahPacing |
|
根据垃圾回收效率分配应用程序的线程与可用空间 |
|
-XX:ShenandoahPacingMaxDelay=<size><unit> |
|
在最大延迟时间之前,将不干预应用程序的分配 |
|
-XX:+ShenandoahDegeneratedGC |
|
当程序遇到分配失败时,Shenandoah 将会暂停应用线程,直到完成后续垃圾回收工作 |
|
-XX:+ShenandoahVerify |
|
检测垃圾回收异常 |
|
-XX:+ShenandoahGCHeuristics=[ passive | aggressive ] |
|
暂停应用线程执行垃圾回收 或 执行紧凑的垃圾回收并疏散所有非空 Region |
|
-XX:+ShenandoahVerifyOptoBarriers |
|
验证 C2 模式 |
|
https://wiki.openjdk.java.net/display/shenandoah/Main
日志
Java9之后
jvm日志使用 -Xlog[<what>][:[<output>][:[<decorators>][:<output-options>]]]
记录
可以使用 java -Xlog:help
查看帮助文档
-Xlog:disable -Xlog:gc+liveness=info,rt*=off:file=../logs/gc_%t.log:time,uptimemillis,pid:filecount=5,filesize=1024
先关闭所有日志,打开 gc 和存活对象的日志,关闭包含 rt 的日志级别,输出日志至文件,额外包含时间、耗时、进程 id,以 5 个 1M 的文件循环保存历史日志文件。
参考:
http://www.cnblogs.com/IcanFixIt/p/7259712.html
https://juejin.im/post/5a981f056fb9a028bf04bec4
https://blog.gceasy.io/2017/10/17/43-gc-logging-flags-removed-in-java-9/
通用
参数 |
常用 |
说明 |
备注 |
-Xloggc=<file> |
|
日志文件 |
例如 -Xloggc=/data/application/logs/gc.log |
-XX:+verbosegc |
● |
打印每次GC的消息 |
|
-XX:+PrintGC |
● |
打印每次GC的消息 |
|
-XX:+PrintGCCause |
● |
打印 GC 的原因 |
|
-XX:+PrintGCDetails |
● |
打印GC日志详情 |
建议开启 |
-XX:+PrintGCTimeStamps |
|
输出GC的时间戳 |
以基准时间的形式 |
-XX:+PrintGCDateStamps |
|
输出GC的时间戳 |
以日期的形式,如 2013-05-04T21:53:59.234+0800 |
-XX:ErrorFile=<file> |
● |
当 JVM 出现致命错误时,生成错误文件,包括了导致 jvm crash 的重要信息 |
|
-XX:+PrintGCApplicationStoppedTime |
● |
打印 JVM 的停顿时间 |
|
-XX:+PrintGCApplicationConcurrentTime |
|
打印 JVM 在两次停顿之间的正常运行时间 |
|
-XX:+HeapDumpOnOutOfMemoryError |
● |
遇到 OutOfMemoryError 时拍摄一个堆转储快照 ,并将其保存在一个文件中。 |
|
-XX:+HeapDumpBeforeFullGC |
● |
遇到 Full GC 前拍摄一个堆转储快照 ,并将其保存在一个文件中。 |
|
-XX:+HeapDumpAfterFullGC |
|
遇到 Full GC 后拍摄一个堆转储快照 ,并将其保存在一个文件中。 |
|
-XX:HeapDumpPath=<file> |
● |
指定导出堆的存放路径 |
|
-XX:-OmitStackTraceInFastThrow |
● |
要求 JVM 始终抛出含堆栈的异常 |
|
-XX:+UseGCLogFileRotation |
|
开启日志文件的循环 |
|
-XX:NumberOfGCLogfiles=<size> |
|
配置日志循环文件个数 |
|
-XX:GCLogfileSize=<size><unit> |
|
指定日志文件大小 |
|
-XX:NativeMemoryTracking=[off | summary | detail] |
|
查看 JVM 本地方法使用情况 |
jcmd VM.native_memory [summary &##124; detail &##124; baseline &##124; summary.diff &##124; detail.diff &##124; shutdown] [scale= KB &##124; MB &##124; GB] |
-XX:+PrintNMTStatistics |
|
在 JVM 退出时打印 NMT 报告 |
|
-verbose:class |
|
在程序运行的时候有多少类被加载 |
verbose:class 来监视 java -verbose:class |
-verbose:gc |
|
在虚拟机发生内存回收时在输出设备显示信息 |
|
-verbose:jni |
|
输出 native 方法调用的相关情况 |
|
-XX:+PrintHeapAtGC |
|
在进行 GC 的前后打印出堆的信息 |
|
-XX:+PrintFlagsInitial |
|
显示所有可设置参数及默认值 |
|
-XX:+PrintFlagsFinal |
|
显示可以获取到所有设置后参数及值 |
|
-XX:+UnlockDiagnosticVMOptions |
|
解锁对 JVM 进行诊断的选项参数 |
|
-XX:+PrintCommandLineFlags |
|
显示出 JVM 初始化完毕后所有跟最初的默认值不同的参数及它们的值 |
|
-XX:+PrintTenuringDistribution |
|
打印内存模型各代信息 |
|
-XX:+DisplayVMOutput |
|
打印 JVM 输出 |
|
-XX:+LogVMOutput |
|
记录 JVM 输出到日志 |
|
-XX:+PrintJNIGCStalls |
|
打印进入临界区 (JVM 传向 JNI) 的线程信息 |
|
-XX:+PrintFLSStatistics=<size> |
|
GC 前后输出内存的统计信息 |
当 size > 1 时还会输出 IndexedFreeLists 统计信息 |
-XX:+PrintSafepointStatistics |
|
输出 safepoint 的统计信息 |
|
-XX:+PrintSafepointStatisticsCount=<size> |
|
输出 safepoint 的统计次数 |
|
-XX:+PrintAdaptiveSizePolicy |
|
打印自适应收集的大小 |
|
-XX:+PrintReferenceGC |
|
跟踪系统内的软引用,弱引用,虚引用和 finallize 队列 |
|
-XX:+PrintClassHistogram |
|
打印出实例的数量以及空间大小 |
|
JIT
参数 |
常用 |
说明 |
备注 |
-XX:+PrintInlining |
|
打印内联优化的方法 |
|
-XX:+PrintCompilation |
|
简单的输出一些关于从字节码转化成本地代码的编译过程 |
|
-XX:+LogCompilation |
|
输出 JIT 的编译信息 |
|
-XX:+PrintAssembly |
|
通过使用外部的 disassembler.so 库打印汇编的字节码和 native 方法来辅助分析 |
需要和-XX:UnlockDiagnosticVMOptions一起使用 |
-XX:+TraceClassLoading |
|
动态跟踪类的加载 |
|
-XX:+TraceClassUnloading |
|
动态跟踪类的卸载 |
|
-XX:+PrintInterpreter |
|
打印解释过程中生成的汇编指令 |
exclude,跳过编译指定的方法; compileonly,只编译指定的方法; inline/dontinline,设置是否内联指定方法; print,打印生成的汇编代码 |
-XX:+PrintAssembly |
|
打印JIT编译过程中生成的汇编指令 |
无法使用该参数可以用 -XX:+PrintOptoAssembly 来代替 |
G1
参数 |
常用 |
说明 |
备注 |
-XX:G1LogLevel=fine, finer, finest |
|
日志包含信息以及每个工作线程的信息 |
|
-XX:+PrintStringDeduplicationStatistics |
|
打印字符串去重的影响 |
|
其他
参数 |
常用 |
说明 |
备注 |
-Dcom.sun.management.jmxremote=<boolean> |
|
是否支持远程 JMX 监控 |
|
-Dcom.sun.management.jmxremote.port=<port> |
|
指定远程监控端口号,随机分配 RMI 端口号 |
|
-Dcom.sun.management.jmxremote.ssl=<boolean> |
|
是否对连接开启 SSL 加密 |
|
-Dcom.sun.management.jmxremote.authenticate=<boolean> |
|
是否需要开启用户认证 |
|
-Dcom.sun.management.jmxremote.rmi.port=<port> |
|
指定 RMI 与远程监控端口号 |
|
-Djava.rmi.server.hostname=<host> |
|
指定 RMI 服务的对应主机名 |
|
-Djava.net.preferIPv4Stack=true |
|
优先使用 IPv4 |
|
-Djava.security.egd=file:/dev/./urandom |
● |
使用非阻塞的随机数与熵池策略 |
|
-Djava.util.concurrent.ForkJoinPool.common.parallelism=<size> |
|
修改 ForkJoinPool 的默认线程数 |
|
-XX:+UnlockExperimentalVMOptions |
|
解锁 JVM 实验性参数 |
|
-XX:+UnlockCommercialFeatures |
|
解锁 JVM 商业特性 |
|
-XX:+LogCommercialFeatures |
|
对商业特性进行日志记录 |
|
-XX:+FlightRecorder |
|
开启 JFR 监控 |
|
-XX:FlightRecorderOptions=<parameter>=<value> |
|
设置 JFR 监控参数 |
|
-XX:OnError=command |
|
设置当发生不可恢复的错误时执行的命令 |
|
-XX:OnOutOfMemoryError=command |
|
设置当发生内存溢出错误时执行的命令 |
|
-XX:+AggressiveOpts |
|
使用预设的优化參數 |
|
-Djava.awt.headless=true |
|
使用计算能力模拟外设功能 |
例如创建图片 |