冬眠的笔记
首页文章分类书单项目关于
冬眠
X

© 2026 冬眠的笔记 · 用文字记录思考,用思考改变生活

首页>文章>Java
JavaJVM调优JVM 参数

Java 虚拟机配置

常用 JVM 参数详解:堆内存、GC 相关、诊断参数以及生产环境推荐配置

冬眠
冬眠
专注于技术、阅读与思考
2025-11-19
发布日期
5 min read
阅读时长
浏览量
Java 虚拟机配置

服务器16核,32G内存,Java8环境,从JVM调优的角度上讲,如何将服务器的内存充分分配给JVM,以便JVM性能达到最优?

JVM内存配置策略

1. 堆内存配置

对于32G内存的服务器,建议JVM堆内存配置如下:

# 基础配置
-Xms24g -Xmx24g

配置说明:

  • 分配24G给JVM堆内存(约75%的系统内存)
  • 保留8G给操作系统、直接内存、元空间等
  • 设置-Xms和-Xmx相等,避免动态扩容带来的性能开销

2. 新生代配置

# 新生代配置
-XX:NewRatio=2
# 或者直接指定新生代大小
-Xmn8g

配置说明:

  • NewRatio=2表示老年代:新生代 = 2:1
  • 新生代约8G,老年代约16G
  • 适合大多数应用场景的对象分配模式

3. 元空间配置

# 元空间配置(Java8)
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=1g

配置说明:

  • 初始元空间512M,最大1G
  • 避免频繁的元空间扩容
  • 根据应用加载的类数量调整

4. 直接内存配置

# 直接内存限制
-XX:MaxDirectMemorySize=2g

配置说明:

  • 限制直接内存使用量
  • 防止直接内存过度使用导致系统内存不足

5. 垃圾收集器配置

推荐配置1:G1GC(推荐)

# G1垃圾收集器配置
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=16m
-XX:G1NewSizePercent=30
-XX:G1MaxNewSizePercent=40
-XX:G1MixedGCCountTarget=8
-XX:InitiatingHeapOccupancyPercent=45

适用场景:

  • 大堆内存应用
  • 对延迟敏感的应用
  • 需要可预测GC停顿时间

推荐配置2:ParallelGC

# Parallel垃圾收集器配置
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:ParallelGCThreads=16
-XX:MaxGCPauseMillis=100

适用场景:

  • 吞吐量优先的应用
  • 批处理任务
  • 对停顿时间要求不高

6. 完整配置示例

高吞吐量配置

java -server \
  -Xms24g -Xmx24g \
  -Xmn8g \
  -XX:MetaspaceSize=512m \
  -XX:MaxMetaspaceSize=1g \
  -XX:MaxDirectMemorySize=2g \
  -XX:+UseParallelGC \
  -XX:+UseParallelOldGC \
  -XX:ParallelGCThreads=16 \
  -XX:MaxGCPauseMillis=100 \
  -XX:+PrintGC \
  -XX:+PrintGCDetails \
  -XX:+PrintGCTimeStamps \
  -Xloggc:gc.log \
  YourApplication

低延迟配置

java -server \
  -Xms24g -Xmx24g \
  -XX:MetaspaceSize=512m \
  -XX:MaxMetaspaceSize=1g \
  -XX:MaxDirectMemorySize=2g \
  -XX:+UseG1GC \
  -XX:MaxGCPauseMillis=200 \
  -XX:G1HeapRegionSize=16m \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -XX:InitiatingHeapOccupancyPercent=45 \
  -XX:+PrintGC \
  -XX:+PrintGCDetails \
  -XX:+PrintGCTimeStamps \
  -Xloggc:gc.log \
  YourApplication

7. 性能监控参数

# GC日志
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationStoppedTime
-Xloggc:gc-%t.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=100M

# JVM崩溃时生成dump文件
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/dumps/

# JFR性能分析
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder

8. 内存分配建议

内存区域 分配大小 占比 说明
JVM堆内存 24G 75% 应用主要内存区域
元空间 512M-1G 1.5-3% 类元数据存储
直接内存 2G 6% NIO、网络缓冲等
操作系统 4-5G 12-15% 系统缓存、其他进程
预留内存 1-2G 3-6% 安全边界

9. 调优建议

  1. 逐步调优:从保守配置开始,根据监控数据逐步优化

  2. 监控关键指标:

    • GC频率和停顿时间
    • 内存使用率
    • 应用响应时间
    • CPU使用率
  3. 压力测试:在生产环境配置前进行充分的压力测试

  4. 定期review:根据应用特性和负载变化调整配置

10. 常见问题排查

  • 频繁Full GC:检查老年代大小、对象生命周期
  • 内存泄漏:使用MAT等工具分析heap dump
  • GC停顿时间过长:考虑调整垃圾收集器或参数
  • CPU使用率过高:检查GC线程数配置是否合理

通过以上配置,可以充分利用32G内存,实现JVM性能最优化。具体参数需要根据应用特性进行微调。

文章标签

JavaJVM调优JVM 参数
元空间 MetaSpace 详解
上一篇

元空间 MetaSpace 详解

2025-11-19

线程 FullGC 问题排查
下一篇

线程 FullGC 问题排查

2025-11-19

冬眠

冬眠

博主

专注于技术、阅读与思考。在这里记录学习、思考与生活。

116
文章
2
分类
关注我
系列:JVM 实战

第 2 篇,共 3 篇

上一篇

线程 FullGC 问题排查

下一篇

元空间 MetaSpace 详解

文章目录

目录

  • JVM内存配置策略
  • 1. 堆内存配置
  • 2. 新生代配置
  • 3. 元空间配置
  • 4. 直接内存配置
  • 5. 垃圾收集器配置
  • 6. 完整配置示例
  • 7. 性能监控参数
  • 8. 内存分配建议
  • 9. 调优建议
  • 10. 常见问题排查

相关文章

查看更多
线程 FullGC 问题排查

线程 FullGC 问题排查

2025-11-19 · 10 min read

元空间 MetaSpace 详解

元空间 MetaSpace 详解

2025-11-19 · 9 min read

JWT 基础知识

JWT 基础知识

2025-11-19 · 7 min read