JVM参数:标准化参数,非标准化参数,不稳定参数
Java虚拟机(JVM)的运行可以通过各种参数进行配置和调优。这些参数通常可以分为三类:
- 标准化参数
- 非标准化参数
- 不稳定参数
这些参数允许开发人员和系统管理员根据应用程序的需求和运行环境进行精确的调整和优化。
1. 标准化参数
标准化参数是在不同的JVM实现中都具有相同含义和行为的参数。它们通常用于控制JVM的基本行为和性能特性。以下是一些常见的标准化参数:
-
-Xmx:指定Java堆的最大内存大小。例如,-Xmx2G表示将Java堆的最大内存限制为2GB。 -
-Xms:指定Java堆的初始内存大小。例如,-Xms512M表示在启动时分配512MB的初始堆内存。 -
-Xss:指定每个线程的堆栈大小。例如,-Xss256k表示每个线程的堆栈大小为256KB。 -
-Xmn:指定新生代的大小。例如,-Xmn256M表示将新生代的大小设置为256MB。 -
-XX:MaxPermSize(在Java 8之前)或-XX:MaxMetaspaceSize(Java 8及以后):指定永久代(或元空间)的最大大小。
标准化参数通常在不同的JVM版本和厂商之间具有一致性,因此可以在不同的环境中重复使用。
2. 非标准化参数
非标准化参数是特定于JVM实现或厂商的参数,它们不受JVM规范的约束。这些参数通常用于提供额外的特性或进行特定实现的调优。一些常见的非标准化参数包括:
-
-XX:+UseConcMarkSweepGC:启用CMS(Concurrent Mark-Sweep)垃圾收集器。 -
-XX:ParallelGCThreads:设置并行垃圾收集器线程的数量。 -
-XX:PermSize(在Java 8之前)或-XX:MetaspaceSize(Java 8及以后):指定永久代(或元空间)的初始大小。
这些参数通常在特定的JVM版本或厂商的实现中生效,因此在更换JVM时需要谨慎使用。
3. 不稳定参数
不稳定参数是一些实验性质的参数,可能在不同的JVM版本中随时更改或取消。它们通常用于尝试新的特性或进行性能测试。使用不稳定参数时需要格外小心,并密切关注JVM版本的变化。一些不稳定参数示例包括:
-
-XX:+UnlockExperimentalVMOptions:启用实验性VM选项,使不稳定参数生效。 -
-XX:+UseG1GC:启用G1(Garbage-First)垃圾收集器,它在某些场景下可能是一种实验性的选择。 -
-XX:+UseZGC:启用Z Garbage Collector,这是Java 11引入的实验性垃圾收集器。
不稳定参数的使用应该谨慎,并且在生产环境中需要特别注意。
学习:Java 业务开发常见错误 100 例学习笔记