一个标准的 Spring Boot 项目(即没有复杂业务逻辑、仅包含默认自动配置和一个简单控制器)在启动后,通常会占用 100MB 到 250MB 的堆内存(Heap Memory),具体数值取决于以下因素:
📌 影响内存使用的主要因素:
1. JVM 启动参数
- 默认情况下,JVM 会根据系统资源自动分配堆内存。
- 如果未指定
-Xmx(最大堆内存)和-Xms(初始堆内存),实际使用的内存可能波动较大。
示例:
java -jar your-app.jar
等价于 JVM 自动管理内存大小。
你可以通过添加如下参数来限制最大内存:
java -Xms64m -Xmx128m -jar your-app.jar
⚠️ 注意:即使设置了
-Xmx128m,实际总内存消耗可能超过这个值,因为还有非堆内存(如 Metaspace、线程栈、直接内存等)。
2. Spring Boot 版本与依赖
不同版本或引入的不同模块会影响内存使用:
| 模块 | 内存影响 |
|---|---|
spring-boot-starter-web |
约 100~150MB |
加上 spring-boot-starter-data-jpa |
+20~50MB |
加上 spring-boot-starter-thymeleaf |
+10~30MB |
加上 spring-cloud-starter-config / eureka 等微服务组件 |
+30~100MB |
3. 运行环境
- 开发环境(IDE 中运行):比命令行运行更高,通常占用 250MB ~ 500MB。
- 生产环境(打成 jar 包运行):更轻量,约 100MB ~ 250MB。
- 容器中运行(Docker):可以通过内存限制控制。
✅ 示例数据(仅供参考)
| 场景 | 堆内存占用 | 总内存占用(含非堆) |
|---|---|---|
| 最小化 Spring Boot 应用(web starter) | ~100MB | ~150MB |
| 加入 JPA 和 HikariCP 连接池 | ~150MB | ~220MB |
| 加入 Actuator、Security、Thymeleaf | ~180MB | ~250MB |
| 使用 Spring Cloud 微服务组件 | ~250MB+ | ~400MB+ |
🔍 如何查看实际内存使用?
方法一:使用 jstat 或 jconsole
jps -l
jstat -gc <pid>
方法二:使用 Actuator(如果你加了依赖)
访问 /actuator/metrics/jvm.memory.used 接口查看内存使用情况。
方法三:命令行方式估算
ps -p <PID> -o rss,vsz
rss是物理内存使用(单位 KB)vsz是虚拟内存使用
💡 小贴士:如何减少内存占用?
- 移除不必要的依赖(例如 Thymeleaf、Test 等)
- 使用
Thin Launcher或Spring Boot Thin Launcher减少 jar 包体积 - 启用 Native Image(GraalVM)构建原生应用
- 可将内存占用降低到几十 MB,但构建过程较复杂
- 使用精简 JDK(如 Adoptium 的 Alpine 镜像)
🧪 实验建议:
你可以在本地创建一个最简单的 Spring Boot 项目测试内存使用:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
然后使用:
java -jar demo.jar
并观察其内存使用(如通过 top、htop、jconsole)。
✅ 总结
| 项目类型 | 堆内存 | 总内存 |
|---|---|---|
| 极简 Web 应用 | 100~150MB | 150~200MB |
| 包含数据库连接 | 150~200MB | 200~250MB |
| 微服务架构 | 200~300MB | 300~400MB |
如果你有具体的依赖项列表,我可以帮你更精确估算内存占用。欢迎补充!
CLOUD技术博