Java虚拟机:常用参数
一、为什么要关注JVM参数在Java应用运行过程中我们经常会遇到以下问题应用程序响应缓慢内存占用过高频繁发生垃圾回收GC出现OutOfMemoryError错误这些问题往往与JVM的配置密切相关。通过合理的参数调优我们可以优化应用性能减少GC停顿时间提高系统稳定性避免内存溢出快速定位问题通过日志追踪异常接下来让我们从最基础的参数开始一步步深入了解JVM的配置世界。二、内存配置参数为程序分配家产JVM的内存管理就像管理一个仓库我们需要合理分配各个区域的大小。以下是几个核心的内存配置参数2.1 堆内存大小配置参数说明示例-Xms堆内存初始大小-Xms512m-Xmx堆内存最大大小-Xmx2048m实践经验通常将-Xms和-Xmx设置为相同的值这样可以避免JVM在运行时动态调整堆大小带来的性能开销。2.2 新生代配置参数说明示例-Xmn新生代内存大小-Xmn256m-XX:MaxNewSize新生代最大值-XX:MaxNewSize512m-XX:SurvivorRatioEden与Survivor区比例-XX:SurvivorRatio8什么是SurvivorRatio新生代分为Eden区和两个Survivor区From和To。-XX:SurvivorRatio8表示Eden区与单个Survivor区的比例为8:1即Eden占新生代的8/10每个Survivor占1/10。新生代内存布局SurvivorRatio8 ┌──────────────────────────────────────────────────────────┐ │ Eden区 (80%) │ S0 (10%) │ S1 (10%) │ └──────────────────────────────────────────────────────────┘2.3 元空间Metaspace配置在JDK 8之后永久代PermGen被元空间取代参数说明-XX:MaxMetaspaceSize元空间最大值-XX:MetaspaceSize元空间初始大小⚠️注意元空间使用的是本地内存Native Memory不再是堆内存的一部分。三、GC日志参数让垃圾回收开口说话垃圾回收是JVM最核心的功能之一但GC过程对开发者来说就像一个黑盒。通过GC日志参数我们可以让GC过程变得透明可见。3.1 基础GC日志参数参数说明输出示例-XX:PrintGC打印基础GC信息[GC 4793K-377K (15872K), 0.0006926 secs]-XX:PrintGCDetails打印详细GC信息包含各区域内存变化详情-XX:PrintGCTimeStamps输出GC时间戳相对启动时间0.234: [GC ...]-XX:PrintGCDateStamps输出GC时间戳绝对日期时间2026-07-24T10:30:45.1230800: [GC ...]3.2 日志输出与保存参数说明-verbose:gc启用GC日志等同于-XX:PrintGC-Xloggc:/path/to/gc.log指定GC日志文件路径推荐配置组合-XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:/var/log/myapp/gc.log3.3 解读GC日志详解让我们通过一个实际例子来理解GC日志的含义[GC (System.gc()) [PSYoungGen: 4957K-856K(76288K)] 4957K-864K(251392K), 0.0028907 secs] [Times: user0.00 sys0.00, real0.00 secs]逐段解析部分含义GCGC类型Minor GCSystem.gc()触发原因代码显式调用PSYoungGen垃圾收集器Parallel Scavenge处理年轻代4957K-856K(76288K)年轻代GC前占用→GC后占用总容量4957K-864K(251392K)整个堆GC前占用→GC后占用总容量0.0028907 secsGC耗时秒Times: user0.00 sys0.00用户态/内核态CPU时间real0.00 secs实际经过时间Full GC日志解析[Full GC (System.gc()) [PSYoungGen: 856K-0K(76288K)] [ParOldGen: 8K-629K(175104K)] 864K-629K(251392K), [Metaspace: 3391K-3391K(1056768K)], 0.0057303 secs]这里多出了ParOldGen老年代的信息表明这次Full GC同时清理了年轻代和老年代。3.4 GC日志末尾的堆信息当使用-XX:PrintGCDetails时在程序结束或发生OOM时JVM会打印完整的内存使用情况Heap PSYoungGen total 76288K, used 1966K [0x000000076b380000, 0x0000000770880000, 0x00000007c0000000) eden space 65536K, 3% used [0x000000076b380000,0x000000076b56b9e0,0x000000076f380000) from space 10752K, 0% used [0x000000076f380000,0x000000076f380000,0x000000076fe00000) to space 10752K, 0% used [0x000000076fe00000,0x000000076fe00000,0x0000000770880000) ParOldGen total 175104K, used 624K [0x00000006c1a00000, 0x00000006cc500000, 0x000000076b380000) object space 175104K, 0% used [0x00000006c1a00000,0x00000006c1a9c2d8,0x00000006cc500000) Metaspace used 3419K, capacity 4496K, committed 4864K, reserved 1056768K这部分信息包含了各区域总容量和已使用容量内存地址范围Metaspace的使用情况包括class space四、系统参数查看了解JVM的真实配置4.1 查看显式参数-XX:PrintVMOptions该参数会打印通过命令行显式传递给JVM的所有参数。4.2 查看所有有效参数-XX:PrintCommandLineFlags这是最实用的参数它会打印JVM最终生效的所有参数包括显式指定和隐式默认的。输出示例-XX:InitialHeapSize266658240 -XX:MaxHeapSize4266531840 -XX:PrintCommandLineFlags -XX:UseCompressedClassPointers -XX:UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:UseParallelGC从输出中我们可以了解到JVM的初始堆大小和最大堆大小使用的垃圾收集器这里是ParallelGC是否启用了指针压缩等优化小技巧在启动脚本中添加-XX:PrintCommandLineFlags可以快速确认JVM的实际运行配置对于排查配置问题非常有帮助。五、参数速查表分类参数作用推荐设置堆内存-Xms堆初始大小与-Xmx相同-Xmx堆最大大小根据物理内存调整新生代-Xmn新生代大小堆大小的1/3~1/4-XX:SurvivorRatioEden/Survivor比例8默认GC日志-XX:PrintGCDetails详细GC日志建议开启-Xloggc日志文件路径建议配置调试-XX:PrintCommandLineFlags显示生效参数排查问题时使用

相关新闻

磁控动感单车技术解析:从电磁原理到智能健身实践

磁控动感单车技术解析:从电磁原理到智能健身实践

最近很多朋友在问,在家健身选什么器材好?既要有效果,又要不占地方,最好还能让运动过程不那么枯燥。作为一个长期关注健康科技产品的开发者,我发现动感单车确实是个不错的选择,特别是磁控技术的智能车型。今…

2026/10/20 10:38:57 阅读更多 →
苏州汽车喷漆为什么总有人“补完更难看”?问题不在价格,而在这3个关键环节

苏州汽车喷漆为什么总有人“补完更难看”?问题不在价格,而在这3个关键环节

在苏州本地的汽车维修咨询中,有一个很高频的问题:“为什么有些车喷完漆,看起来反而比没修之前更明显?”这类问题,并不局限于低价维修,甚至在中高价喷漆案例中同样存在。 从行业角度来看,这背后其…

2026/10/20 9:23:12 阅读更多 →
RAG技术解析:大模型应用开发实战指南

RAG技术解析:大模型应用开发实战指南

1. RAG技术在大模型应用开发中的核心价值RAG(Retrieval-Augmented Generation)技术正在重塑大模型应用的开发范式。作为从业者,我亲历了从纯Prompt工程到RAG架构的转变过程。这种技术通过将信息检索与文本生成相结合,有效解决了大…

2026/10/20 17:09:30 阅读更多 →

最新新闻

React项目实战:从极简标题到完整前端方案的技术选型与性能优化

React项目实战:从极简标题到完整前端方案的技术选型与性能优化

1. 从“rea”这个标题说起:一个被极简命名掩盖的完整项目第一次看到“rea”这个标题,我承认自己愣了几秒。没有正文,没有关键词,没有摘要,只有一个三字母的短词。这种极简到近乎空白的输入,反而让我觉得有意…

2026/10/20 19:00:00 阅读更多 →
新概念第四册Lesson 35精读:用英语重装思维操作系统

新概念第四册Lesson 35精读:用英语重装思维操作系统

1. 为什么这篇课文值得花时间精读:不是背单词,而是重建思维节奏“新概念英语第四册Lesson 35 — The Pegasus Book of Inventors”,光看标题,很多人第一反应是:“哦,老教材,讲发明家故事的阅读课…

2026/10/20 19:00:00 阅读更多 →
零信任架构结合SPIFFE/SPIRE的本地大模型WebUI服务

零信任架构结合SPIFFE/SPIRE的本地大模型WebUI服务

开篇先把话说明白:这套东西不是“我搭了个聊天机器人”,而是一套完整的本地化WebUI作品集,底层用的开源社区12B参数级别的指令微调大模型,也就是标题里的Gemma-3-12B-IT,外层再包一层交互展示界面,同时把整…

2026/10/20 19:00:00 阅读更多 →
社交网络分析中的数据建模:从属性图到图数据库的工程实践

社交网络分析中的数据建模:从属性图到图数据库的工程实践

2021年我在某社交平台的数据团队做用户分析时,每天要处理的数据量级以亿计,但真正困扰我们的不是存储和计算,而是“这些数据到底该怎么组织”。同样是“用户”和“用户之间发生了互动”,在关系数据库里拆成三张表,在图…

2026/10/20 19:00:00 阅读更多 →
VHDL手写FFT:参数化定点RTL实现,摆脱IP核依赖

VHDL手写FFT:参数化定点RTL实现,摆脱IP核依赖

FFT的VHDL手写实现,我在项目里折腾过好几版,从最简单的16点验证到1024点应用,踩了不少坑也积累了一些经验。这次分享的这套代码,核心特点是完全绕开厂商IP核,N点长度通过顶层参数配置,输入16位有符号定点数…

2026/10/20 19:00:00 阅读更多 →
Claude Skill 下载安装完全指南:三种方法与排错思路

Claude Skill 下载安装完全指南:三种方法与排错思路

我估摸着不少人和我一样,第一次听到"Claude Skill"这四个字的时候,脑子里冒出来的问题就一个:这到底是个插件、一套配置,还是一个能自动干活的小助手?等你真正打开搜索框开始找下载安装教程,又会…

2026/10/20 18:58:59 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →