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/7/24 13:08:31 阅读更多 →
苏州汽车喷漆为什么总有人“补完更难看”?问题不在价格,而在这3个关键环节

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

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

2026/7/24 13:08:31 阅读更多 →
RAG技术解析:大模型应用开发实战指南

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

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

2026/7/24 13:08:31 阅读更多 →

最新新闻

Arch Linux更新后mkinitcpio -P报错error的解决

Arch Linux更新后mkinitcpio -P报错error的解决

Arch Linux更新后进行mkinitcpio应该是SOP标准操作(虽然我记住这个也是因为某次更新kernel之后再启动纯黑屏grub引导都没进去给我吓一跳。今天我sudo pacman -Syu之后mkinitcpio -P发现报错,问了DeepSeek之后发现给的解决方式有点怪,于是我在…

2026/7/24 13:18:37 阅读更多 →
CentOS 7.9安装最新版Firefox的完整指南

CentOS 7.9安装最新版Firefox的完整指南

1. 为什么要在CentOS 7.9上安装Firefox? 作为一款长期支持的企业级Linux发行版,CentOS 7.9默认搭载的是老旧版的Firefox ESR(Extended Support Release)。我在实际运维工作中发现,这个预装版本存在三个明显痛点&#x…

2026/7/24 13:18:37 阅读更多 →
计算机Python毕设实战- 基于 Python Web 的中学学科教学管理系统中学信息技术教学资源管理与作业考核系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

计算机Python毕设实战- 基于 Python Web 的中学学科教学管理系统中学信息技术教学资源管理与作业考核系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/24 13:18:37 阅读更多 →
食品经营许可证识别API参数详解与最佳实践

食品经营许可证识别API参数详解与最佳实践

适用场景与接口价值 在企业资质审核、供应链合规验证、食品经营许可自动录入等场景中,手动录入许可证信息效率低且易出错。通过调用食品经营许可证识别API,可将图片中的13个关键字段(许可证编号、经营者名称、法定代表人、经营场所、主体业态…

2026/7/24 13:18:37 阅读更多 →
计算机Django毕设实战-大学生团员信息统计与团组织管理系统 基于 Python Web 的团员信息运维管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

计算机Django毕设实战-大学生团员信息统计与团组织管理系统 基于 Python Web 的团员信息运维管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/24 13:18:37 阅读更多 →
基于GLM大模型的企业OA知识库智能问答系统实践

基于GLM大模型的企业OA知识库智能问答系统实践

1. 项目背景与核心价值 企业知识管理正面临数据孤岛难题——OA系统里的审批流程、合同文档、会议纪要等关键信息,往往被困在各自独立的系统中。我们团队最近用GLM大模型搭建了一个能自动对接第三方OA数据的知识库系统,实现了从数据采集、清洗到智能问答的…

2026/7/24 13:17:36 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻