JVM 常用参数

199 阅读4分钟

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 垃圾收集器