惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
TaoSecurity Blog
TaoSecurity Blog
Cloudbric
Cloudbric
Cisco Talos Blog
Cisco Talos Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
H
Heimdal Security Blog
The Last Watchdog
The Last Watchdog
T
Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Know Your Adversary
Know Your Adversary
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Securelist
Microsoft Azure Blog
Microsoft Azure Blog
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
D
Docker
V
Vulnerabilities – Threatpost
Attack and Defense Labs
Attack and Defense Labs
Hugging Face - Blog
Hugging Face - Blog
W
WeLiveSecurity
Engineering at Meta
Engineering at Meta
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
博客园_首页
P
Privacy International News Feed
Scott Helme
Scott Helme
N
News and Events Feed by Topic
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
T
Tenable Blog
H
Hacker News: Front Page
N
News and Events Feed by Topic
罗磊的独立博客
Google Online Security Blog
Google Online Security Blog
S
Security @ Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
A
About on SuperTechFans
有赞技术团队
有赞技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
G
GRAHAM CLULEY
Application and Cybersecurity Blog
Application and Cybersecurity Blog

博客园 - 郭慕荣

彻底搞懂 Codex Skill 与插件:区别、试用、核心作用、项目落地全指南(程序员实战向) Codex Skill 和插件到底有什么区别?程序员如何在项目中落地使用 claudecode 配置防止配置文件泄露总结 Claude code分析外部文件总结 Claude code三种模式详解 hasCompletedOnboarding详解 Claudecode 有哪些常用的命令 claude.md文件详解 claude code 的setting文件详解 Docker部署zookeeper总结 Mac中git ssh的配置(GitLab) Java 类加载机制 面试题(一) 如何监控和调优JVM性能? hashmap 和currenthashmap 的原理?详解一下 aop在项目中使用的场景?怎么使用? Java dubbo spring springboot中的spi机制 spring中常见的两种代理模式 Redis的zset 面试汇总 drools 规则引擎在线化配置 springcloud中常用的注解详解 springcloud中网关gateway总结 spring是怎么解决循环依赖的? MySQL 死锁 怎么处理? 在写left join的时候 是大表在左侧 还是小表在左侧(二) 在写left join的时候 是大表在左侧 还是小表在左侧(一) nacos客户端(接口调用者)如何感知被调用服务下线? (二) nacos客户端(接口调用者)如何感知被调用服务下线?(一) 在MySQL中 redolog undolog binlog 写入的场景,顺序
jvm常用的参数有哪些? 怎么配置?
郭慕荣 · 2025-10-29 · via 博客园 - 郭慕荣

JVM 参数是控制 Java 虚拟机运行行为的核心配置,主要用于内存分配、垃圾回收(GC)调优、日志输出、调试监控等场景。合理配置 JVM 参数能避免 OOM(内存溢出)、优化 GC 性能、提升应用稳定性。以下按功能分类梳理常用参数及配置方式。

JVM 内存模型主要包括堆(Heap)、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器,其中堆和元空间是内存配置的重点(栈内存通常无需频繁调整)。

堆是 JVM 中最大的内存区域,用于存储对象实例,分为新生代(Young Generation) 和老年代(Old Generation),新生代又分为 Eden 区和两个 Survivor 区(S0、S1)。

  • JDK 7 及之前:方法区通过 “永久代(PermGen)” 实现,用-XX:PermSize-XX:MaxPermSize配置(已废弃)。
  • JDK 8 及之后:方法区通过 “元空间(Metaspace)” 实现,元空间默认使用本地内存(不受堆大小限制),需配置以下参数避免元空间溢出(类太多时可能 OOM)。

每个线程对应一个虚拟机栈,存储方法调用的栈帧(局部变量、操作数栈等),栈内存过小可能导致StackOverflowError(递归过深)。

JVM 提供多种垃圾回收器(如 Serial GC、Parallel GC、CMS、G1、ZGC 等),需根据应用类型(吞吐量优先 / 低延迟优先)选择。

GC 日志用于分析 GC 频率、停顿时间、内存变化等,是排查 OOM、GC 频繁等问题的关键依据。

用于在应用异常时生成诊断信息(如 OOM 时的堆快照)、启用远程调试等。

JVM 参数通过启动 Java 程序时的命令行参数指定,格式为:

示例:典型 Web 应用配置(8GB 服务器,G1 GC)

  1. 参数前缀区分:

    • -:标准参数(如-jar-D);
    • -X:非标准参数(如-Xms-Xmx);
    • -XX:高级参数(如-XX:+UseG1GC),这类参数可能随 JDK 版本变化。
  2. 版本兼容性:部分参数在高版本 JDK 中废弃(如 CMS GC 在 JDK9 后标记为 deprecated,JDK14 移除),需根据实际 JDK 版本调整。

  3. 避免过度配置:优先保证-Xms-Xmx、GC 类型、日志和 OOM 快照参数,其他参数在有明确性能问题时再调优(通过 JProfiler、VisualVM 等工具分析后调整)。

JVM 参数的核心是内存分配和GC 配置,需根据应用类型(Web / 批处理)、服务器资源、性能需求调整。日常开发中,至少要配置堆内存大小、GC 日志、OOM 快照参数,以便问题排查;高并发场景需进一步优化 GC 收集器和停顿时间。