前言
同一个项目,同一个maven仓库。同事的没问题,自己本地跑不起来,排查一天。
本地多模块老旧SpringBoot项目,连续遇到3轮完全不同场景的内存溢出OOM报错 ,从服务运行堆溢出、元空间溢出,到最后编译阶段直接崩掉。全程踩遍参数改错、配置找错、进程隔离、JVM机制误区,本文完整复盘报错原因、解决方案、配置修改全流程,直接拿来避坑。
一、第一轮报错:服务运行元空间溢出
报错信息
java
java: OutOfMemoryError: insufficient memory
原因分析
- 项目是多模块、依赖包极多,还有大量框架动态代理、注解类,JDK8的元空间(Metaspace) 用来存加载的类信息,默认给的
512M上限完全不够用,服务刚启动加载类就直接内存爆满崩溃。 - 启动配置默认开启了
Add dependencies with "provided" scope to classpath:把编译才需要、运行完全用不上 的provided依赖,全部强行加载进内存,额外疯狂占用元空间,加速内存爆掉。 - 堆内存初始值和最大值差距过大,JVM内存频繁扩容,内存碎片严重。
解决方案(Run启动配置修改)
直接替换启动配置VM Options完整参数:
-Xms4g -Xmx6g -XX:MaxMetaspaceSize=1536m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\idea_heap_dump
同时取消勾选 Add dependencies with "provided" scope to classpath 选项。
-Xms4g -Xmx6g:拉满业务程序堆内存,初始和最大内存缩小差值,运行更稳定-XX:MaxMetaspaceSize=1536m:元空间上限拉到1.5G,根治类加载内存不足- 追加内存快照参数,后续堆内存溢出自动生成dump文件

二、第二轮报错:服务运行堆内存溢出
报错信息
java.lang.OutOfMemoryError: Java heap space
原因分析
程序运行过程中,业务代码创建的对象、加载的数据量太大,JVM堆内存(存放运行对象的内存) 上限不够用,直接被占满。
同时补充踩坑:之前配置里的堆内存参数初始值设置过低,频繁扩容加剧内存紧张。
解决方案
沿用上面启动配置的堆内存参数即可,-Xmx6g 最大6G堆内存,完全满足常规SpringBoot项目业务运行、数据加载需求,解决堆内存爆满问题。
三、第三轮终极报错:编译阶段系统资源不足
最新报错信息
java: 系统资源不足。
java: OutOfMemoryError: insufficient memory
Errors occurred while compiling module 'emis-manage'
堆栈全是com.sun.tools.javac编译器相关代码。
原因分析
前面改的所有启动配置,100%完全不生效!
IDEA里有两个完全独立的Java进程,互相内存、参数完全隔离:
- 之前改的:SpringBoot业务程序运行进程
- 本次崩的:IDEA后台代码编译构建进程(JPS+javac编译器)
项目类多、继承层级极深、海量注解扫描,IDEA默认给编译进程只分配700M内存,编译还没跑完内存直接爆满,构建直接终止。
同时新版IDEA(2026.1)配置大搬家,一开始完全找不到编译器内存修改入口。
完整解决方案(新版IDEA全配置修改)
1. 修改全局构建进程内存(核心配置)
路径:Settings -> Build, Execution, Deployment -> Compiler
-
Shared heap size:默认700M 修改为 3072M(3G) -
Shared VM options填入参数:-XX:MaxMetaspaceSize=1024m -XX:+UseG1GC
直接放大整个项目构建进程的堆内存+元空间内存。

2. 修改javac编译器专属内存参数
路径:左侧子菜单 Java Compiler
底部Additional command line parameters 粘贴编译器专属参数:
-J-Xmx3072m -J-XX:MaxMetaspaceSize=1024m
前缀
-J-必须保留:专门把参数传递给javac编译器内核进程同时取消无用选项:
Use '--release' option for cross-compilation (Java 9 and later)(项目是Java8,该选项完全无用,还额外占用内存)
3. 必做收尾操作
全部配置保存后,执行:
File -> Invalidate Caches 全量清除所有项目缓存、索引,点击Invalidate and Restart完全重启IDEA。
重启后项目正常编译、正常启动运行。
五、全程踩坑总结
- 先分清报错阶段,再改配置
运行报错改「运行启动配置」,编译报错改「Settings全局Compiler配置」,两个进程参数互不干涉。 - OOM报错分3种,原因完全不一样
Java heap space:堆内存不够,放大-Xmxinsufficient memory(运行期):元空间不够,放大MaxMetaspaceSize,关闭无用provided依赖加载insufficient memory(编译期):IDEA构建编译器内存不够,放大全局构建进程内存
- dump快照不是所有OOM都生成
只认业务程序堆内存溢出,元空间、编译报错全都不生成,且路径必须是完整合法文件夹。 - 新版IDEA配置位置大变
构建进程堆内存配置在Build, Execution, Deployment -> Compiler页面,不在高级设置里。 - 本地SpringBoot开发铁则
永远关闭Add dependencies with "provided" scope to classpath,不加载运行无用依赖。
本次主要改动有三点:
- 添加VM参数,扩大堆内存和元空间
- 去掉
Add dependencies with "provided" scope to classpath - 新版idea调整编译专属内存参数
