JVM 常用参数
一、 -X 和 -XX 的区别
-X 参数
-
定义:
-X参数是标准的 JVM 扩展参数,用于配置一些基本的功能 -
特点:
- 稳定性高:JVM 官方支持的,具有较好的兼容性和稳定性
- 功能明确:主要用于调整内存大小、线程大小等
- 跨版本兼容:在不同 JVM 版本中行为一致
-
常见参数:
-
-Xms:设置JVM初始堆大小,通常与-Xmx配置相同,避免堆动态扩展带来的额外的性能开销 -
-Xmx:设置JVM最大堆大小,根据实例内存设置,避免内存不足或浪费 -
-Xss:设置每个线程栈大小,默认值为 1MB,栈大小直接影响线程的数量 -
-Xmn:设置年轻代大小,年轻代大小直接影响 GC 频率,通常设置为堆大小的 1/3 到 1/4 -
-Xloggc:<fliepath>:将 GC 日志输出到指定文件
-
-XX 参数
-
定义:
-XX参数是 JVM 的高级参数,用于配置更底层的、实验性的或特定实现的功能 -
特点:
- 稳定性低:部分参数可能未经过充分测试,稳定性较低
- 复杂性:涉及垃圾回收器的选择、JIT 编译优化、性能监控等高级功能
- 跨版本兼容:不同 JVM 版本可能支持不同的 -XX 参数,甚至同一参数的行为也可能不同
-
常见参数:
-
-XX:+UseG1GC:启用 G1 垃圾回收器 -
-XX:G1NewSizePercent:设置年轻代占整个堆内存的最小百分比,例如:-XX:G1NewSizePercent=30表示年轻代占堆内存至少30%;若设置过大会导致老年代空间不足,从而影响 Full GC 的频率;可以与-XX:G1MaxNewSizePercent配合使用,可以动态调整年轻代大小 -
-XX:G1MaxNewSizePercent:设置年轻代占整个堆内存的最大百分比,例如:-XX:G1MaxNewSizePercent=30表示年轻代占堆内存最多30%;可以与-XX:G1NewSizePercent配合使用,可以动态调整年轻代大小 -
-XX:InitiatingHeapOccupancyPercent:设置 G1 触发并发标记的阈值,例如:-XX:InitiatingHeapOccupancyPercent=60表示当堆使用率达到 60% 时,启动并发标记;设置过低可能会导致并发 GC 过于频繁,增加 CPU 开销,设置过大可能会导致 Full GC 风险增加 -
-XX:MaxGCPauseMillis:设置 G1 垃圾回收器在单次 GC 时的最大停顿时间,单位毫秒,默认值200毫秒,例如:-XX:MaxGCPauseMillis=200;如果设置较小的阈值,G1 会减少每次回收的区域数量,从而降低单次停顿时间,但可能导致 GC 频率增加;如果设置较大的阈值,G1 会增加每次回收的区域数量,从而减少 GC 频率,但单次停顿时间可能较长 -
-XX:ParallelGCThreads:设置并行垃圾回收器(如 Parallel、G1)在并行收集使用的线程数量,通常设置为 CPU 核心数的 1/2~3/4,例如:-XX:ParallelGCThreads=6表示使用 6 个线程执行并行 GC -
-XX:ConcGCThreads:设置并发垃圾回收器(如 G1 、CMS)并发收集线程数量,通常设为ParallelGCThreads的 1/4;例如:-XX:ConcGCThreads=1表示使用 1 个线程执行并发 GC -
-XX:MaxRAMPercentage:设置 JVM 堆内存占宿主机总内存的最大百分比,例如:-XX:MaxRAMPercentage=60表示 JVM 最大堆内存为系统总内存的 60%;适用于容器化环境(如 Docker、Kubernetes),JVM 根据可用内存动态调整堆大小;如果未设置,JVM 默认使用 -Xmx 配置的值 -
-XX:MetaspaceSize:设置元空间的初始大小,例如:-XX:MetaspaceSize=512m表示元空间初始大小为 512MB;元空间其实使用的是本地内存,而非 JVM 堆内存; -
-XX:MaxMetaspaceSize:设置元空间的最大大小,例如:-XX:MaxMetaspaceSize=512m表示元空间最大大小为 512MB;一般 MetaspaceSize 和 MaxMetaspaceSize 设置相同的值,防止元空间动态扩展 -
-XX:MaxDirectMemorySize:设置直接内存的最大大小,例如:-XX:MaxDirectMemorySize=512m表示直接内存的最大大小为 512MB;直接内存和堆内存是独立的内存区域,但二者均共享系统的总内存限制
-
二、 -X 和 -XX 的用法规范
-
-X:通常后面跟一些简短的字母或单词来表示特定的功能或选项,例如:-Xms设置初始堆内存大小、-Xmx设置最大堆内存大小、-Xss设置线程栈大小...等等 -
-XX:后面通常跟着具体的参数名称和值,形式为-XX:[+|-]<option>或-XX:<option>=<value>;其中+或-表示启用或禁用,例如:-XX:+UseG1GC表示启用 G1 垃圾收集器