一、JVM 内存管理属性
1. 堆内存管理属性
序号 | 属性名称 | 描述 |
1 | -Xms | 设置初始堆内存大小 |
2 | -Xmx | 设置最大堆内存大小 |
3 | -Xmn | 设置年轻代内存大小 |
4 | -XX:NewSize= | 设置年轻代的初始大小 |
5 | -XX:MaxNewSize= | 设置年轻代的最大大小 |
6 | -XX:NewRatio= | 设置年轻代与老年代的比例 |
7 | -XX:SurvivorRatio= | 设置 Eden 区与 Survivor 区的比例 |
8 | -XX:MetaspaceSize= | 设置 Metaspace 的初始大小 |
9 | -XX:MaxMetaspaceSize= | 设置 Metaspace 的最大大小 |
10 | -XX:MaxPermSize= | 设置永久代的最大大小(适用于 JDK 7 及更早版本) |
11 | -XX:PermSize= | 设置永久代的初始大小(适用于 JDK 7 及更早版本) |
12 | -XX:+AlwaysPreTouch | 在 JVM 启动时预分配并初始化所有内存 |
2. 非堆内存管理属性
序号 | 属性名称 | 描述 |
1 | -XX:CompressedClassSpaceSize= | 设置类空间的大小(非堆内存,用于存储类元数据) |
2 | -XX:MaxDirectMemorySize= | 设置 NIO 直接缓冲区的最大内存大小 |
3 | -XX:CodeCacheSize= | 设置 JIT 编译器使用的代码缓存区大小 |
4 | -XX:ReservedCodeCacheSize= | 设置 JIT 编译器保留的代码缓存区大小 |
3. 垃圾回收器内存管理属性
序号 | 属性名称 | 描述 |
1 | -XX:MaxGCPauseMillis= | 设置垃圾回收的最大暂停时间 |
2 | -XX:GCTimeRatio= | 设置垃圾收集时间与程序运行时间的比例 |
3 | -XX:InitiatingHeapOccupancyPercent= | 设置触发垃圾收集的堆占用阈值 |
4 | -XX:MinHeapFreeRatio= | 设置最小的堆空闲比例,低于此值时会增加堆大小 |
5 | -XX:MaxHeapFreeRatio= | 设置最大的堆空闲比例,高于此值时会减少堆大小 |
4. GC 日志和调试相关的内存管理属性
序号 | 属性名称 | 描述 |
1 | -XX:+PrintGCDetails | 输出详细的垃圾收集日志 |
2 | -XX:+PrintGCTimeStamps | 输出垃圾收集的时间戳 |
3 | -XX:+PrintGCDateStamps | 输出带有日期的垃圾收集日志 |
4 | -XX:+PrintHeapAtGC | 在每次 GC 时打印堆信息 |
5 | -XX:+PrintTenuringDistribution | 打印对象在老年代中的分布情况 |
6 | -XX:+PrintGCApplicationStoppedTime | 输出垃圾收集期间应用暂停的时间 |
7 | -XX:+HeapDumpOnOutOfMemoryError | 在内存溢出时生成堆转储文件 |
8 | -XX:HeapDumpPath= | 指定堆转储文件的保存路径 |
5. 线程栈和本地方法栈管理属性
序号 | 属性名称 | 描述 |
1 | -Xss | 设置每个线程的栈大小 |
2 | -XX:ThreadStackSize= | 设置线程栈大小(与 -Xss 类似) |
3 | -XX:VMThreadStackSize= | 设置 JVM 本地线程栈大小 |
4 | -XX:CompilerThreadStackSize= | 设置编译线程的栈大小 |
6. 其他内存管理相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseCompressedOops | 启用压缩指针(用于 64 位 JVM,优化对象指针) |
2 | -XX:+UseLargePages | 启用大页内存支持 |
3 | -XX:LargePageSizeInBytes= | 设置大页内存的大小 |
4 | -XX:+ExplicitGCInvokesConcurrent | 将 System.gc() 调用转为并发 GC |
5 | -XX:+DisableExplicitGC | 禁用 System.gc() 调用 |
7. 旧版内存管理相关属性(仅适用于 JDK 7 及更早版本)
序号 | 属性名称 | 描述 |
1 | -XX:PermSize= | 设置永久代的初始大小 |
2 | -XX:MaxPermSize= | 设置永久代的最大大小 |
这些属性涵盖了 JVM 内存管理的各个方面,帮助用户在不同内存区域的配置、GC 调优、栈内存管理等方面进行优化。
二、JVM 垃圾收集器(Garbage Collector,GC)属性
1. GC 启用与选择相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseSerialGC | 启用串行垃圾收集器(适用于小型应用) |
2 | -XX:+UseParallelGC | 启用并行垃圾收集器(吞吐量优先,适用于多核 CPU) |
3 | -XX:+UseParallelOldGC | 启用并行老年代收集(与 -XX:+UseParallelGC 一起使用) |
4 | -XX:+UseConcMarkSweepGC | 启用 CMS(并发标记清除)垃圾收集器(低暂停时间的应用) |
5 | -XX:+UseG1GC | 启用 G1(Garbage First)垃圾收集器(适用于大内存应用) |
6 | -XX:+UseShenandoahGC | 启用 Shenandoah 垃圾收集器(低暂停的垃圾收集器) |
7 | -XX:+UseZGC | 启用 ZGC(低延迟、高吞吐的垃圾收集器) |
8 | -XX:+UseEpsilonGC | 启用 Epsilon(无垃圾回收机制,仅作性能测试用途) |
2. GC 日志输出相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+PrintGC | 启用垃圾收集日志输出(简单 GC 信息) |
2 | -XX:+PrintGCDetails | 输出详细的垃圾收集信息 |
3 | -XX:+PrintGCTimeStamps | 输出垃圾收集时间戳 |
4 | -XX:+PrintGCDateStamps | 输出带有日期的垃圾收集时间戳 |
5 | -XX:+PrintHeapAtGC | 在每次垃圾收集时打印堆内存的信息 |
6 | -XX:+PrintTenuringDistribution | 打印对象在年轻代中的分布情况 |
7 | -XX:+PrintAdaptiveSizePolicy | 输出自适应调整策略的日志信息 |
8 | -XX:+PrintReferenceGC | 打印软引用、弱引用、虚引用处理的日志 |
9 | -Xlog:gc* | 使用统一的日志框架输出垃圾收集日志(适用于 JDK 9 及更高版本) |
3. GC 性能调优相关属性
序号 | 属性名称 | 描述 |
1 | -XX:MaxGCPauseMillis= | 设置 GC 的最大暂停时间 |
2 | -XX:GCTimeRatio= | 设置垃圾收集时间与应用运行时间的比例 |
3 | -XX:InitiatingHeapOccupancyPercent= | 设置老年代占用多少百分比后触发垃圾收集(CMS、G1) |
4 | -XX:ConcGCThreads= | 设置并发垃圾收集线程的数量(CMS、G1) |
5 | -XX:ParallelGCThreads= | 设置并行垃圾收集线程的数量(适用于 UseParallelGC 和 G1GC) |
6 | -XX:MaxTenuringThreshold= | 设置对象在新生代的最大年龄 |
7 | -XX:SurvivorRatio= | 设置 Eden 区和 Survivor 区的比例 |
8 | -XX:+UseAdaptiveSizePolicy | 启用自适应内存调整策略(自动调整堆大小、年轻代大小等) |
4. G1 GC 专用属性
序号 | 属性名称 | 描述 |
1 | -XX:MaxGCPauseMillis= | 设置 G1 GC 的最大暂停时间 |
2 | -XX:InitiatingHeapOccupancyPercent= | 设置堆使用率达到多少时触发 G1 GC 收集 |
3 | -XX:G1HeapRegionSize= | 设置 G1 GC 堆的区域大小(通常为 1MB 到 32MB) |
4 | -XX:G1NewSizePercent= | 设置 G1 新生代大小的最小百分比 |
5 | -XX:G1MaxNewSizePercent= | 设置 G1 新生代大小的最大百分比 |
6 | -XX:G1ReservePercent= | 设置 G1 保留的堆空间百分比以避免 Full GC |
7 | -XX:G1MixedGCCountTarget= | 设置 G1 在单次垃圾收集中要进行的混合 GC 周期数 |
8 | -XX:+G1UseAdaptiveIHOP | 启用自适应的 G1 GC 堆占用百分比 |
5. CMS GC 专用属性
序号 | 属性名称 | 描述 |
1 | -XX:CMSInitiatingOccupancyFraction= | 设置在老年代占用百分比达到多少时开始 CMS GC |
2 | -XX:+UseCMSInitiatingOccupancyOnly | 强制 CMS 仅在达到指定的堆占用阈值时触发 |
3 | -XX:+CMSClassUnloadingEnabled | 启用 CMS GC 时卸载无用的类 |
4 | -XX:+CMSScavengeBeforeRemark | 在 CMS GC 的初始标记阶段前先执行一次 minor GC |
5 | -XX:+CMSParallelRemarkEnabled | 启用 CMS 的并行重标记阶段 |
6 | -XX:+CMSConcurrentMTEnabled | 启用 CMS 的并发多线程标记和清除 |
7 | -XX:+UseCMSCompactAtFullCollection | 在 Full GC 时对内存进行压缩整理 |
8 | -XX:CMSFullGCsBeforeCompaction= | 在多少次 Full GC 后对堆内存进行压缩 |
6. ZGC 专用属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseZGC | 启用 ZGC 垃圾收集器 |
2 | -XX:ZCollectionInterval= | 设置 ZGC 的垃圾收集间隔 |
3 | -XX:ZUncommitDelay= | 设置 ZGC 释放未使用内存的延迟时间 |
4 | -XX:ZStallThreshold= | 设置 ZGC 的应用线程停顿时间占总时间的最大百分比 |
5 | -XX:+ZProactive | 启用 ZGC 主动垃圾收集 |
7. Shenandoah GC 专用属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseShenandoahGC | 启用 Shenandoah 垃圾收集器 |
2 | -XX:ShenandoahGarbageThreshold= | 设置老年代的占用百分比阈值以触发垃圾收集 |
3 | -XX:+ShenandoahGuaranteedGCInterval= | 设置 Shenandoah 的垃圾收集间隔时间 |
4 | -XX:+ShenandoahUncommit | 启用 Shenandoah GC 释放未使用内存 |
这些属性涵盖了常见 JVM 垃圾收集器的选择、调优以及日志输出等方面。每种垃圾收集器都有其独特的属性和调优参数,可以根据应用程序的需求进行选择和优化。
三、 JVM 类加载属性
1. 类加载路径相关属性
序号 | 属性名称 | 描述 |
1 | -classpath | 设置类文件和资源的搜索路径(可以用 -cp 简写) |
2 | -Djava.class.path= | 设置 JVM 启动时的类加载路径(相当于 -classpath) |
3 | -Djava.library.path= | 设置本地库(如 .so 或 .dll 文件)的搜索路径 |
4 | -Dsun.boot.class.path= | 设置 JVM 启动时加载的系统类路径 |
5 | -XX:BootClassPath= | 设置引导类加载器的类路径(可用于修改系统级类的加载顺序) |
6 | -XX:BootClassPathAppend= | 在默认引导类路径后追加类路径 |
7 | -XX:BootClassPathPrepend= | 在默认引导类路径前添加类路径 |
2. 类加载器调试与日志属性
序号 | 属性名称 | 描述 |
1 | -verbose:class | 输出 JVM 类加载的详细信息 |
2 | -XX:+TraceClassLoading | 跟踪类加载过程,打印每个类的加载信息 |
3 | -XX:+TraceClassUnloading | 跟踪类卸载过程,打印每个类的卸载信息 |
4 | -XX:+TraceClassLoadingPreorder | 跟踪 JVM 类的加载顺序 |
5 | -XX:+LogClassLoading | 使用日志框架记录类加载事件(适用于 JDK 9 及以上版本) |
6 | -Xlog:class+load=info,class+unload=info | 输出类加载和卸载的日志信息(适用于 JDK 9 及以上版本) |
3. 类加载性能调优相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+ClassUnloading | 启用类卸载功能(默认启用,但可以关闭以提高性能) |
2 | -XX:+ClassUnloadingWithConcurrentMark | 启用类卸载与并发标记清除配合(CMS 垃圾收集器相关) |
3 | -XX:SharedClassListFile= | 指定共享类列表文件路径,用于共享类数据(AOT 编译优化) |
4 | -XX:SharedArchiveFile= | 指定共享类的归档文件路径(通常用于 class 数据共享) |
5 | -XX:+UseAppCDS | 启用应用类数据共享(JDK 10 及以上版本的 AOT 类共享) |
6 | -XX:ClassMetaspaceSize= | 设置类元数据的初始大小 |
7 | -XX:MaxMetaspaceSize= | 设置类元数据的最大大小 |
4. 模块化与类加载相关属性(适用于 JDK 9 及更高版本)
序号 | 属性名称 | 描述 |
1 | --module-path | 设置模块的搜索路径 |
2 | --add-modules | 向运行时添加模块 |
3 | --limit-modules | 限制 JVM 启动时加载的模块,提升性能 |
4 | --add-reads | 在模块间添加读取依赖 |
5 | --add-exports | 向其他模块导出指定包 |
6 | --add-opens | 向反射开放模块的包 |
7 | --patch-module | 将指定文件修补到模块中 |
8 | --illegal-access= | 控制非法模块访问行为(默认 warn,在 JVM 日志中提示警告) |
5. 类加载错误处理相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+FailOverToOldVerifier | 允许 JVM 使用旧的字节码验证器(适用于 JDK 6 或更早版本的兼容性) |
2 | -XX:+AllowUserClassLoaderInStartup | 允许在 JVM 启动过程中使用用户定义的类加载器 |
3 | -XX:-ErrorFile= | 当 JVM 出现致命错误时,指定错误日志的保存路径 |
6. AOT 编译与类加载相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseAOT | 启用 AOT(Ahead-Of-Time)编译支持 |
2 | -XX:AOTLibrary= | 设置 AOT 库文件路径 |
3 | -XX:+UseJVMCIClassLoader | 使用 JVMCI 类加载器(用于 Graal 编译器支持) |
4 | -XX:+EnableJVMCI | 启用 JVMCI(JVM 编译接口,用于与 Graal 等编译器集成) |
7. 类加载与安全性相关属性
序号 | 属性名称 | 描述 |
1 | -Djava.security.manager | 启用 Java 安全管理器,限制类加载与资源访问 |
2 | -Djava.security.policy= | 设置安全策略文件路径 |
3 | -Djava.ext.dirs= | 设置 Java 扩展目录的路径,用于加载第三方扩展库 |
这些 JVM 类加载相关属性,涵盖了从类路径设置、性能调优到模块化和安全性等多方面。开发者可以根据需要调整这些属性,以优化类加载的性能和灵活性,同时保持系统的安全性和可调试性。
四、JVM性能调优属性
1. 内存管理调优相关属性
序号 | 属性名称 | 描述 |
1 | -Xms | 设置堆内存初始大小 |
2 | -Xmx | 设置堆内存最大大小 |
3 | -Xmn | 设置年轻代大小(Eden + 两个 Survivor 区) |
4 | -XX:NewRatio= | 设置新生代与老年代的大小比例 |
5 | -XX:SurvivorRatio= | 设置 Eden 区和 Survivor 区的大小比例 |
6 | -XX:MaxPermSize= | 设置永久代最大大小(JDK 8 之前使用) |
7 | -XX:MetaspaceSize= | 设置 Metaspace 区的初始大小(JDK 8 及以上) |
8 | -XX:MaxMetaspaceSize= | 设置 Metaspace 区的最大大小 |
9 | -XX:MaxDirectMemorySize= | 设置最大直接内存大小(用于 NIO) |
10 | -XX:+UseCompressedOops | 启用对象指针压缩(64 位 JVM 上,优化内存使用) |
11 | -XX:+UseCompressedClassPointers | 启用类指针压缩(减少 Metaspace 占用内存) |
2. 垃圾回收器调优相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseSerialGC | 启用串行垃圾回收器 |
2 | -XX:+UseParallelGC | 启用并行垃圾回收器(吞吐量优先) |
3 | -XX:+UseParallelOldGC | 启用并行老年代垃圾回收 |
4 | -XX:+UseConcMarkSweepGC | 启用 CMS 垃圾回收器(低延迟) |
5 | -XX:+UseG1GC | 启用 G1 垃圾回收器 |
6 | -XX:MaxGCPauseMillis= | 设置垃圾收集的最大暂停时间 |
7 | -XX:GCTimeRatio= | 设置垃圾回收时间占应用运行时间的比例 |
8 | -XX:+UseAdaptiveSizePolicy | 启用自适应内存大小调整策略 |
9 | -XX:ParallelGCThreads= | 设置并行 GC 的线程数 |
10 | -XX:ConcGCThreads= | 设置并发 GC 的线程数 |
11 | -XX:+DisableExplicitGC | 禁用 System.gc() 显式垃圾收集调用 |
12 | -XX:+ScavengeBeforeFullGC | 在 Full GC 前进行 Minor GC |
13 | -XX:+CMSClassUnloadingEnabled | 在 CMS 垃圾回收时卸载无用类 |
14 | -XX:+CMSParallelRemarkEnabled | 启用并行标记阶段 |
3. 线程与并发相关属性
序号 | 属性名称 | 描述 |
1 | -XX:ThreadStackSize= | 设置每个线程的堆栈大小 |
2 | -XX:+UseNUMA | 启用 NUMA(非统一内存访问)支持,用于多处理器优化 |
3 | -XX:+AlwaysPreTouch | 启用所有内存预先分配(减少延迟,但启动时间增加) |
4 | -XX:+BindGCTaskThreadsToCPUs | 绑定垃圾回收线程到特定 CPU 核心以优化性能 |
5 | -XX:CICompilerCount= | 设置 JIT 编译器使用的编译线程数 |
4. 编译与优化相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+TieredCompilation | 启用分层编译(结合解释执行和 JIT 编译,默认启用) |
2 | -XX:CompileThreshold= | 设置触发 JIT 编译的调用次数阈值 |
3 | -XX:+PrintCompilation | 打印每个方法的 JIT 编译信息 |
4 | -XX:+AggressiveOpts | 启用一些较新的优化选项(实验性) |
5 | -XX:InlineSmallCode= | 设置允许内联的小方法的最大字节码大小 |
6 | -XX:MaxInlineSize= | 设置允许内联的方法最大字节码大小 |
7 | -XX:+UseSuperWord | 启用超字优化(用于 SIMD 指令集优化) |
8 | -XX:+UseLoopPredicate | 启用循环优化 |
5. 启动与类加载优化属性
序号 | 属性名称 | 描述 |
1 | -Xshare:on | 启用类数据共享(CDS),加快启动速度 |
2 | -XX:+UseAppCDS | 启用应用类数据共享(JDK 10+) |
3 | -XX:+ClassUnloading | 启用类卸载 |
4 | -XX:+ClassUnloadingWithConcurrentMark | 启用并发标记期间的类卸载(CMS) |
5 | -XX:+TieredCompilation | 启用分层编译,加速 JVM 启动并优化性能 |
6. GC 日志与监控相关属性
序号 | 属性名称 | 描述 |
1 | -Xloggc: | 将 GC 日志输出到指定文件 |
2 | -XX:+PrintGCDetails | 打印 GC 详细信息 |
3 | -XX:+PrintGCTimeStamps | 打印 GC 发生的时间戳 |
4 | -XX:+PrintHeapAtGC | 在每次 GC 之后打印堆内存的使用信息 |
5 | -XX:+PrintGCDateStamps | 打印 GC 发生的日期和时间 |
6 | -XX:+PrintTenuringDistribution | 打印对象在年轻代的分布情况 |
7 | -XX:+TraceClassLoading | 跟踪类加载过程 |
8 | -XX:+TraceClassUnloading | 跟踪类卸载过程 |
9 | -XX:+LogCompilation | 记录 JIT 编译日志 |
10 | -Xlog:gc* | JDK 9 及以上版本使用的统一 GC 日志参数 |
7. 延迟、锁与等待相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseBiasedLocking | 启用偏向锁,减少线程竞争下的锁开销 |
2 | -XX:BiasedLockingStartupDelay= | 设置偏向锁启动的延迟时间 |
3 | -XX:+UseThreadPriorities | 启用线程优先级设置 |
4 | -XX:+OptimizeStringConcat | 启用字符串连接优化 |
8. IO与文件操作相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseOSErrorReporting | 启用操作系统级错误报告 |
2 | -XX:ErrorFile= | 当 JVM 发生错误时将日志输出到指定文件 |
3 | -XX:+AlwaysTenure | 启用老年代提前分配(特定情况下优化内存分配) |
通过这些 JVM 性能调优属性,开发者可以根据不同的应用场景和硬件环境优化 JVM 的运行效率、减少 GC 暂停时间、提高启动速度,并减少锁争用对应用的影响。
五、JVM JIT属性
1. JIT 编译控制相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+TieredCompilation | 启用分层编译,结合解释执行与 JIT 编译以提高性能(默认启用) |
2 | -XX:CompileThreshold= | 设置触发 JIT 编译的调用次数阈值,默认值通常为 10,000 次 |
3 | -XX:TieredStopAtLevel= | 设置 JIT 编译分层的最大级别,1-5 级(5 表示最高优化级别) |
4 | -XX:Tier0BackedgeThreshold= | 设置第 0 级 JIT 编译的后向跳转阈值 |
5 | -XX:Tier3InvocationThreshold= | 设置调用时提升到第 3 层编译的阈值 |
6 | -XX:Tier3BackEdgeThreshold= | 设置后向跳转时提升到第 3 层编译的阈值 |
7 | -XX:Tier4InvocationThreshold= | 设置调用时提升到第 4 层编译的阈值 |
8 | -XX:Tier4BackEdgeThreshold= | 设置后向跳转时提升到第 4 层编译的阈值 |
9 | -XX:+PrintCompilation | 打印每个方法的 JIT 编译信息 |
10 | -XX:+PrintInlining | 打印 JIT 编译时内联方法的详细信息 |
11 | -XX:+LogCompilation | 将 JIT 编译信息写入到文件,通常与 -XX:+PrintCompilation 配合使用 |
12 | -XX:CompileCommand= | 指定编译命令,例如只编译特定类的方法或跳过特定方法的编译 |
13 | -XX:+DoEscapeAnalysis | 启用逃逸分析,优化栈上分配与同步消除 |
14 | -XX:+UseOnStackReplacement | 启用栈上替换(OSR),在运行中间替换为优化后的代码 |
15 | -XX:+CICompilerCount= | 设置并行 JIT 编译的线程数 |
2. 编译优化相关属性
序号 | 属性名称 | 描述 |
1 | -XX:MaxInlineSize= | 设置允许内联的方法最大字节码大小 |
2 | -XX:InlineSmallCode= | 设置允许内联的小方法最大字节码大小 |
3 | -XX:FreqInlineSize= | 设置频繁调用方法的内联大小 |
4 | -XX:LoopUnrollLimit= | 设置循环展开的次数上限 |
5 | -XX:+UseSuperWord | 启用超字优化,利用 SIMD 指令优化循环执行 |
6 | -XX:+UseLoopPredicate | 启用循环谓词优化,帮助优化循环体 |
7 | -XX:+OptimizeStringConcat | 启用字符串连接优化,利用 StringBuilder 优化多字符串连接 |
8 | -XX:+AggressiveOpts | 启用一些激进的优化选项(实验性) |
9 | -XX:+ProfiledCodeHeapRecompilation | 在代码堆内保存概要信息,提升编译后代码的再编译效率 |
10 | -XX:+UseFastJNIAccessors | 启用快速 JNI 访问器,减少 JNI 调用开销 |
3. 编译日志与调试属性
序号 | 属性名称 | 描述 |
1 | -XX:+PrintCompilation | 打印每个方法的编译信息 |
2 | -XX:+PrintInlining | 打印内联信息,显示哪些方法在编译时被内联 |
3 | -XX:+LogCompilation | 将编译信息输出到文件(通常为 hotspot.log) |
4 | -XX:PrintAssemblyOptions= | 设置打印汇编代码的选项 |
5 | -XX:+PrintCodeCache | 打印 JIT 编译器使用的代码缓存信息 |
6 | -XX:+PrintSafepointStatistics | 打印 JVM 中的 Safepoint 统计信息 |
7 | -XX:+PrintInterpreter | 打印解释执行的详细信息 |
8 | -XX:+PrintAdapterHandlers | 打印适配器处理程序的信息(主要用于 JNI 调用) |
4. 逃逸分析与栈上分配属性
序号 | 属性名称 | 描述 |
1 | -XX:+DoEscapeAnalysis | 启用逃逸分析,优化栈上分配与同步消除 |
2 | -XX:+EliminateLocks | 启用同步消除,配合逃逸分析减少不必要的锁开销 |
3 | -XX:+EliminateAllocations | 启用栈上分配,优化局部对象的分配 |
4 | -XX:+UseTLAB | 启用线程本地分配缓冲区(Thread-Local Allocation Buffer) |
5 | -XX:TLABSize= | 设置 TLAB 的大小 |
6 | -XX:TLABRefillWasteFraction= | 设置 TLAB 填充浪费的最大比率 |
5. 方法内联与代码缓存相关属性
序号 | 属性名称 | 描述 |
1 | -XX:InlineSmallCode= | 设置允许内联的小方法的最大字节码大小 |
2 | -XX:MaxInlineSize= | 设置内联方法的最大字节码大小 |
3 | -XX:ReservedCodeCacheSize= | 设置 JIT 编译器的代码缓存最大大小 |
4 | -XX:+SegmentedCodeCache | 启用分段代码缓存,优化不同 JIT 编译代码的存储 |
5 | -XX:+PrintCodeCache | 打印 JIT 编译器的代码缓存信息 |
6 | -XX:+CodeCacheFlushing | 启用代码缓存刷新,防止代码缓存耗尽 |
6. 编译器相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseJVMCICompiler | 启用 JVMCI 编译器接口(用于 Graal 编译器支持) |
2 | -XX:+EnableJVMCI | 启用 JVMCI(JVM 编译器接口) |
3 | -XX:+UseGraal | 启用 Graal JIT 编译器 |
4 | -XX:+PrintGraal | 打印 Graal 编译器的相关信息 |
5 | -XX:GraalCompilerThreads= | 设置 Graal 编译器的线程数 |
6 | -XX:+UseAOT | 启用 AOT(提前编译),减少 JIT 负载 |
7 | -XX:AOTLibrary= | 指定 AOT 编译库路径 |
8 | -XX:+UseC2 | 启用 C2 编译器(高性能优化编译器,默认启用) |
9 | -XX:-UseC1 | 禁用 C1 编译器(用于关闭分层编译中的低级别编译) |
7. 栈上替换(OSR)与再编译属性
以下是有关栈上替换(OSR,On-Stack Replacement)与再编译的 JVM 属性:
栈上替换(OSR)相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+UseOnStackReplacement | 启用栈上替换(OSR),允许在方法执行时动态替换为优化后的代码 |
2 | -XX:MaxOSRStackDepth= | 设置栈上替换的最大栈深度,限制栈上替换的深度 |
3 | -XX:OSRStackSize= | 设置栈上替换时栈的大小 |
再编译相关属性
序号 | 属性名称 | 描述 |
1 | -XX:+RecompileAlways | 强制所有方法在 JIT 编译后都进行再编译 |
2 | -XX:CompileCommand= | 指定编译命令,例如 recompile 用于指定再编译特定方法 |
3 | -XX:MaxRecompileLevel= | 设置方法的最大再编译层级,控制方法的再编译深度 |
4 | -XX:+UseJVMCICompiler | 启用 JVMCI 编译器接口,支持 Graal 编译器的再编译功能 |
5 | -XX:+UseGraal | 启用 Graal JIT 编译器,支持高级再编译功能 |
解释与应用
- 栈上替换(OSR) 允许 JVM 在方法执行的过程中动态地将当前正在运行的代码替换为优化后的代码。这种机制对于需要频繁重新编译的方法非常有用,尤其是在运行期间表现出性能瓶颈时。OSR 可以显著减少长时间运行方法的执行时间,尤其是在方法内部的循环等热点代码上。
- 再编译 是指 JVM 对已经编译过的方法进行进一步的编译和优化。通过再编译,JVM 可以基于运行时的反馈对代码进行更深入的优化。强制所有方法进行再编译可能会增加 JVM 的启动时间,但有助于在应用启动后的性能优化。
通过配置这些属性,开发者可以控制 JIT 编译器的再编译策略,并优化运行时性能,适应各种应用场景。
六、JVM线程管理属性
1. 线程栈大小
序号 | 属性名称 | 描述 |
1 | -Xss | 设置每个线程的栈大小 |
2 | -XX:ThreadStackSize= | 同 -Xss,用于设置线程的堆栈大小 |
2. 线程池与线程数量
序号 | 属性名称 | 描述 |
1 | -XX:ParallelGCThreads= | 设置并行垃圾回收的线程数 |
2 | -XX:ConcGCThreads= | 设置并发垃圾回收的线程数 |
3 | -XX:CICompilerCount= | 设置 JIT 编译器使用的编译线程数 |
4 | -XX:MaxGCPauseMillis= | 设置垃圾回收的最大暂停时间 |
5 | -XX:ThreadPriorityPolicy= | 设置线程优先级策略(如 1 表示 Linux 默认) |
3. 线程优先级与调度
序号 | 属性名称 | 描述 |
1 | -XX:+UseThreadPriorities | 启用线程优先级设置 |
2 | -XX:+UseNUMA | 启用 NUMA(非统一内存访问)支持,优化多处理器性能 |
3 | -XX:+BindGCTaskThreadsToCPUs | 将垃圾回收线程绑定到特定 CPU 核心 |
4. 锁与同步
序号 | 属性名称 | 描述 |
1 | -XX:+UseBiasedLocking | 启用偏向锁,减少线程竞争下的锁开销 |
2 | -XX:BiasedLockingStartupDelay= | 设置偏向锁启动的延迟时间 |
3 | -XX:+UseFastLocking | 启用快速锁定优化(减少锁竞争开销) |
4 | -XX:+EliminateLocks | 启用同步消除,减少锁的使用 |
5 | -XX:+UseContended | 启用竞争字段优化,减少锁竞争带来的性能问题 |
5. 线程创建与管理
序号 | 属性名称 | 描述 |
1 | -XX:MaxThreads= | 设置 JVM 中允许的最大线程数 |
2 | -XX:+UseThreadPriorities | 启用线程优先级设置 |
3 | -XX:+UseTLAB | 启用线程本地分配缓冲区(Thread-Local Allocation Buffer) |
4 | -XX:TLABSize= | 设置线程本地分配缓冲区的大小 |
6. 线程调试与监控
序号 | 属性名称 | 描述 |
1 | -XX:+PrintThreads | 打印线程状态 |
2 | -XX:+PrintThreadStates | 打印线程的状态信息 |
3 | -XX:+PrintThreadInfo | 打印线程相关信息 |
4 | -XX:+PrintGCDetails | 打印 GC 详细信息(也可以影响线程信息) |
5 | -XX:+PrintSafepointStatistics | 打印 Safepoint 统计信息 |
7. 线程死锁检测
序号 | 属性名称 | 描述 |
1 | -XX:+DetectDeadlock | 启用死锁检测功能 |
2 | -XX:DeadlockDetectionFrequency= | 设置死锁检测的频率(以秒为单位) |
这些 JVM 线程管理属性可以帮助你控制和优化 Java 应用程序的线程行为,从线程栈的大小到线程的创建与管理,再到锁的优化和线程调试。根据具体的应用场景和需求调整这些属性,可以提升应用的性能和稳定性。
七、JVM其他常用属性
序号 | 属性名称 | 描述 |
1 | -D | 设置系统属性 |
2 | -server | 启用服务器模式 JVM(适用于长期运行的应用) |
3 | -client | 启用客户端模式 JVM(适用于快速启动的应用) |
以下是 JVM 中一些常用的其他属性,按分类以序号和表格形式展示:
1. 系统属性
序号 | 属性名称 | 描述 |
1 | -D | 设置 Java 系统属性 |
2 | -Djava.awt.headless=true | 启用无头模式,适用于图形用户界面无关的环境 |
3 | -Djava.net.preferIPv4Stack=true | 优先使用 IPv4 协议 |
4 | -Dfile.encoding= | 设置文件编码方式 |
2. 调试与诊断
序号 | 属性名称 | 描述 |
1 | -Xdebug | 启用调试模式 |
2 | -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n | 启用远程调试,设置调试端口为 8000 |
3 | -XX:+HeapDumpOnOutOfMemoryError | 当发生内存溢出时生成 heap dump 文件 |
4 | -XX:HeapDumpPath= | 设置 heap dump 文件的存储路径 |
5 | -XX:+PrintGCDetails | 打印 GC 详细信息 |
6 | -XX:+PrintGCDateStamps | 打印 GC 时间戳 |
7 | -XX:+PrintGCTimeStamps | 打印 GC 时间戳 |
8 | -XX:+PrintHeapAtGC | 打印 GC 时堆的状态信息 |
9 | -XX:+PrintVMOptions | 打印 JVM 启动参数及其他选项 |
10 | -XX:+ShowMessageBoxOnError | 当 JVM 遇到严重错误时弹出消息框 |
11 | -XX:+UsePerfData | 启用性能监控数据 |
12 | -XX:+UseG1GC | 启用 G1 垃圾回收器 |
3. JVM 资源限制
序号 | 属性名称 | 描述 |
1 | -Xmx | 设置最大堆内存大小 |
2 | -Xms | 设置初始堆内存大小 |
3 | -Xmn | 设置年轻代的大小 |
4 | -XX:MaxPermSize= | 设置永久代的最大大小(JDK 7 及以前版本) |
5 | -XX:MaxMetaspaceSize= | 设置元空间的最大大小(JDK 8 及以后版本) |
6 | -XX:MaxDirectMemorySize= | 设置直接内存的最大大小 |
7 | -XX:MinHeapFreeRatio= | 设置堆中保留的最小空闲比率 |
8 | -XX:MaxHeapFreeRatio= | 设置堆中保留的最大空闲比率 |
4. 类加载与初始化
序号 | 属性名称 | 描述 |
1 | -XX:+ClassUnload | 启用类卸载 |
2 | -XX:+TraceClassLoading | 打印类加载信息 |
3 | -XX:+TraceClassUnloading | 打印类卸载信息 |
4 | -XX:+LazyClassLoading | 启用懒加载类 |
5. 垃圾回收器配置
序号 | 属性名称 | 描述 |
1 | -XX:+UseSerialGC | 使用串行垃圾回收器 |
2 | -XX:+UseParallelGC | 使用并行垃圾回收器 |
3 | -XX:+UseConcMarkSweepGC | 使用并发标记清理垃圾回收器 |
4 | -XX:+UseG1GC | 使用 G1 垃圾回收器 |
5 | -XX:+UseZGC | 使用 ZGC 垃圾回收器(Java 11 及以后版本) |
6 | -XX:+UseShenandoahGC | 使用 Shenandoah 垃圾回收器(Java 12 及以后版本) |
6. JVM 其他配置
序号 | 属性名称 | 描述 |
1 | -XX:+UseAdaptiveSizePolicy | 启用自适应大小调整策略 |
2 | -XX:+UseCompressedOops | 启用压缩对象指针(减少内存占用) |
3 | -XX:+DisableExplicitGC | 禁用显式垃圾回收调用(如 System.gc()) |
4 | -XX:+OptimizeStringConcat | 启用字符串连接优化 |
5 | -XX:SoftRefLRUPolicyMSPerMB= | 设置软引用的 LRU 策略时间限制 |
6 | -XX:+UseFastAccessorMethods | 启用快速访问器方法 |
这些 JVM 常用属性涵盖了系统属性、调试与诊断、资源限制、类加载、垃圾回收器配置及其他 JVM 配置。通过合理配置这些属性,可以更好地控制 JVM 的行为,优化应用程序的性能和稳定性。
本文暂时没有评论,来添加一个吧(●'◡'●)