发布于2026-07-10 阅读(0)
扫一扫,手机访问
在 Cursor IDE 中运行 Spring Boot 项目时,你是不是遇到过这样的场景:应用启动到一半突然报错,一行红字 OutOfMemoryError 格外刺眼?或者 Bean 创建莫名其妙失败,日志里全是依赖注入异常?还有更糟糕的,启动过程卡死、直接崩溃——这些基本上都指向同一个问题:内存不够了。

具体症状包括:应用启动失败,抛出 OutOfMemoryError;Bean 创建失败,提示依赖注入异常;启动过程中明显卡顿甚至直接崩溃;日志里频繁出现与内存相关的错误信息。
问题根源其实不复杂,主要就几点:默认 JVM 内存设置太小——这是最常见的元凶;多模块项目下资源占用本来就高;加上 Spring Boot DevTools 吃内存;还有大量依赖和 Bean 加载,哪个不需要内存?
既然找到了原因,对症下药就行。下面给出几套方案,按推荐程度排序。
在项目根目录的 .vscode/launch.json 中为运行配置添加 JVM 内存参数,这是最直接、最灵活的方式。
如果 .vscode 文件夹还不存在,先在项目根目录建一个,然后在里面创建 launch.json 文件。
{
"version": "0.2.0",
"configurations": [
{
"type": "ja va",
"name": "Current File",
"request": "launch",
"mainClass": "${file}"
},
{
"type": "ja va",
"name": "Spring Boot Application",
"request": "launch",
"mainClass": "com.example.demo.Application",
"projectName": "your-project-name",
"vmArgs": "-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -Dspring.devtools.restart.enabled=false",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "ja va",
"name": "Spring Boot Application (Large)",
"request": "launch",
"mainClass": "com.example.demo.Application",
"projectName": "your-project-name",
"vmArgs": "-Xms2048m -Xmx4096m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Dspring.devtools.restart.enabled=false",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
}
]
}
| 参数 | 说明 | 推荐值 |
|---|---|---|
-Xms | 初始堆内存 | 1024m(小项目)或 2048m(大项目) |
-Xmx | 最大堆内存 | 2048m(小项目)或 4096m(大项目) |
-XX:MetaspaceSize | 元空间初始大小 | 512m 或 1024m |
-XX:MaxMetaspaceSize | 元空间最大大小 | 1024m 或 2048m |
-XX:+UseG1GC | 使用 G1 垃圾收集器 | 推荐启用 |
-XX:MaxGCPauseMillis | 最大 GC 暂停时间(毫秒) | 200 |
-Dspring.devtools.restart.enabled=false | 禁用 DevTools 自动重启 | 减少内存占用 |
按 F5 或点击运行按钮,在弹出菜单中选择配置(比如“Spring Boot Application”),应用就会带着你设定的内存参数启动。
如果希望全局生效,可以在 .vscode/settings.json 中配置:
{
"ja va.jdt.ls.vmargs": "-Xmx2048m -XX:+UseG1GC",
"ja va.debug.settings.vmArgs": "-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m",
"ja va.compile.nullAnalysis.mode": "automatic"
}
macOS/Linux:
export MA VEN_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m" mvn spring-boot:run
Windows PowerShell:
$env:MA VEN_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m" mvn spring-boot:run
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"
在 pom.xml 的 spring-boot-ma ven-plugin 中添加:
org.springframework.boot spring-boot-ma ven-plugin -Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC
#!/bin/bash export MA VEN_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC" mvn spring-boot:run
赋予执行权限:
chmod +x run.sh ./run.sh
@echo off set MA VEN_OPTS=-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC mvn spring-boot:run
如果你正在做一个多模块 Spring Boot 项目,可以参考这个完整配置:
{
"version": "0.2.0",
"configurations": [
{
"type": "ja va",
"name": "Current File",
"request": "launch",
"mainClass": "${file}"
},
{
"type": "ja va",
"name": "API Module",
"request": "launch",
"mainClass": "com.example.api.ApiApplication",
"projectName": "api-module",
"vmArgs": "-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -Dspring.devtools.restart.enabled=false",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "ja va",
"name": "Web Module",
"request": "launch",
"mainClass": "com.example.web.WebApplication",
"projectName": "web-module",
"vmArgs": "-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -Dspring.devtools.restart.enabled=false",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "ja va",
"name": "Job Module",
"request": "launch",
"mainClass": "com.example.job.JobApplication",
"projectName": "job-module",
"vmArgs": "-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "ja va",
"name": "Consumer Module",
"request": "launch",
"mainClass": "com.example.consumer.ConsumerApplication",
"projectName": "consumer-module",
"vmArgs": "-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC",
"console": "internalConsole",
"internalConsoleOptions": "openOnSessionStart"
}
]
}
到底该给多少内存?这里给出几个参考模板,你可以根据实际情况自行调整。
-Xms512m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC
-Xms2048m -Xmx4096m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200
配置生效了吗?可以用下面几招确认一下。
运行应用后,在终端执行 jps -v,查看实际使用的 JVM 参数。
运行期间用 jconsole 或 jvisualvm 看看内存水平;或者通过 Spring Boot Actuator 的 /actuator/metrics 端点获取实时数据。
确认日志中没有出现 OutOfMemoryError、Metaspace 或 Ja va heap space 这类错误。
先让项目用默认配置跑起来,用 jconsole 监控实际使用量,然后根据错误信息微调——Metaspace 溢出就加 MetaspaceSize,堆溢出就加 Xmx。
可能的原因包括:参数格式有误(空格、引号这里容易出错)、系统可用内存本来就不足、有其他配置覆盖了这些参数、或者忘记重启 Cursor IDE 使配置生效。
G1GC 是专门为大堆内存场景优化的,暂停时间更可控。堆内存超过 2GB 时,强烈推荐使用。
在 launch.json 里创建多个配置,比如 Development 用较小内存,Production 用较大内存,Testing 用中等内存。
-Dspring.devtools.restart.enabled=false),能省下不少内存。合理配置 JVM 内存参数,这事儿其实不难。在 Cursor IDE 里,launch.json 方式最推荐,既方便又灵活。根据项目规模选对参数——别给太多也别太抠。记住两个底线:内存设置不要超过系统可用内存,建议至少保留 2GB 给操作系统。动态调整、定期检查,应用才能稳定运行。
注意事项:
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8