当前位置: 首页 > news >正文

JAVA常见的 JVM 参数及其典型默认值

在 Java 线上应用中,JVM 参数的默认值取决于具体的 JVM 实现(如 Oracle JDK、OpenJDK、Zulu 等)、版本(如 Java 8、11、17 等)以及运行环境(物理机、容器等)。以下是常见的 JVM 参数及其典型默认值(以 OpenJDK 8/11 为例):


1. 堆内存相关参数

参数默认值说明
-Xms物理内存的 1/64初始堆大小(最小堆内存)
-Xmx物理内存的 1/4最大堆内存
-XX:NewRatio2新生代与老年代的比例(1:2
-XX:SurvivorRatio8Eden 区与单个 Survivor 区的比例(8:1:1
-XX:MaxTenuringThreshold15对象晋升老年代的年龄阈值(CMS 下可能为 6
-XX:InitialSurvivorRatio8初始 Survivor 区比例

2. 垃圾回收器(GC)相关参数

不同版本的默认 GC 不同:

  • Java 8: 默认 Parallel GC (-XX:+UseParallelGC)

  • Java 9+: 默认 G1 GC (-XX:+UseG1GC)

常见 GC 参数:

参数默认值说明
-XX:+UseSerialGC关闭使用 Serial GC(单线程)
-XX:+UseParallelGCJava 8 默认开启并行 GC
-XX:+UseConcMarkSweepGC关闭CMS GC(Java 14 已废弃)
-XX:+UseG1GCJava 9+ 默认开启G1 GC
-XX:MaxGCPauseMillis200 ms(G1)目标最大 GC 暂停时间
-XX:G1HeapRegionSize根据堆大小自动计算G1 的 Region 大小

3. 元空间(Metaspace)参数

Java 8 移除了永久代(PermGen),改用元空间:

参数默认值说明
-XX:MetaspaceSize20.8 MB(平台相关)初始元空间大小
-XX:MaxMetaspaceSize无限制(受物理内存限制)最大元空间大小
-XX:CompressedClassSpaceSize1 GB(64 位 JVM)压缩类指针空间大小

4. 性能优化参数

参数默认值说明
-XX:+UseCompressedOops开启(64 位 JVM)压缩对象指针
-XX:CICompilerCount根据 CPU 核数JIT 编译器线程数
-XX:ParallelGCThreadsCPU 核数并行 GC 线程数
-XX:ConcGCThreads≈ ParallelGCThreads / 4并发 GC 线程数(如 G1)

5. 其他重要参数

参数默认值说明
-XX:+HeapDumpOnOutOfMemoryError关闭OOM 时生成堆转储文件
-XX:HeapDumpPath./java_pid<pid>.hprof堆转储文件路径
-XX:+PrintGCDetails关闭打印详细 GC 日志
-Xloggc:<file>关闭将 GC 日志输出到文件
-XX:+DisableExplicitGC关闭禁止显式调用 System.gc()

查看默认值的方法

  1. 打印所有 JVM 参数默认值

    java -XX:+PrintFlagsFinal -version

    输出中 := 表示修改后的值,= 表示默认值。

  2. 容器环境注意事项
    JVM 默认根据物理机内存计算堆大小(而非容器限制),需显式设置 -Xmx 或使用 -XX:+UseContainerSupport(Java 8u191+ 支持)。


线上建议配置示例(Java 8 为例)

# 基础配置
-Xms4g -Xmx4g             # 堆内存固定,避免动态调整
-XX:MetaspaceSize=256m    # 避免元空间动态扩容
-XX:+UseG1GC              # 使用 G1 GC(低延迟场景)
-XX:MaxGCPauseMillis=200  # 目标暂停时间

# 故障排查
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/path/to/dumps
-XX:ErrorFile=/path/to/hs_err_pid%p.log

# GC 日志
-Xloggc:/path/to/gc.log 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps

注意事项

  1. 版本差异:不同 JDK 版本的默认值和推荐参数可能不同。

  2. 容器化部署:需结合 -XX:+UseContainerSupport 和 -XX:MaxRAMPercentage 等参数适配容器内存限制。

  3. 监控与调优:根据实际应用负载和监控数据(如 GC 暂停时间、吞吐量、内存使用率)调整参数。

建议通过工具(如 VisualVM、Grafana + Prometheus)持续监控 JVM 状态,结合压力测试验证配置合理性。

相关文章:

  • CMMI(能力成熟度模型集成)简介
  • 蓝桥复习2(温度开始)
  • 系统思考反馈
  • 写Prompt的技巧和基本原则
  • PyQt6基础_界面控件简单介绍III
  • 【夜话系列】DelayQueue延迟队列(上):原理剖析与实现机制
  • 公网专线IP和私网专线IP之间的区别是什么?
  • 定时任务(python)
  • nodejs:midi-writer-js 将基金净值数据转换为 midi 文件
  • 多线程猜数问题
  • AI CUDA 工程师:Agentic CUDA 内核发现、优化和组合
  • 前后台系统
  • JavaScript单例模式
  • JS—Token与JWT
  • [测试] Google Test | 主流的 C 测试框架
  • 2024最新鸿蒙开发面试题合集(二)-HarmonyOS NEXT Release(API 12 Release)
  • 网络命名空间验证网络重叠现象
  • SpringBoot3.x 集成 shardingsphere-jdbc 实现读写分离
  • 26考研|数学分析:反常积分
  • JSON for Modern C++ 解析 JSON(五)
  • “GoFun出行”订单时隔7年扣费后续:平台将退费,双方已和解
  • 纪念|脖子上挂着红领巾的陈逸飞
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕
  • 马上评|中学生被操场地面烫伤,谁的“大课间”?
  • 国新办将就2025年4月份国民经济运行情况举行新闻发布会
  • 重庆发布经济犯罪案件接报警电子地图,企业可查询导航属地经侦服务点