一个简单的 Spring Boot 项目在运行时占用的内存大小会受到多个因素影响,但我们可以给出一个大致范围和影响因素分析。
📌 一般情况下的内存占用(JVM 堆内存)
对于一个最简单的 Spring Boot 项目(例如只包含 @SpringBootApplication 和一个 REST 接口):
- 最小堆内存(-Xms): 约 50–100 MB
- 最大堆内存(-Xmx): 默认可能达到 256 MB ~ 1 GB(取决于 JVM 默认设置)
- 实际使用堆内存(运行时): 约 80–150 MB
💡 示例:一个空的 Spring Boot Web 项目(仅
spring-boot-starter-web),启动后通过/actuator/metrics/jvm.memory.used查看,通常堆内存使用在 100 MB 左右。
✅ 影响内存占用的主要因素
| 因素 | 内存影响 |
|---|---|
| 引入的 Starter 模块 | web、data-jpa、security 等越多,内存越高 |
| JVM 参数配置 | 可通过 -Xms 和 -Xmx 控制最小/最大堆内存 |
| Java 版本 | Java 8 vs Java 17+,元空间(Metaspace)行为不同 |
| 是否启用 DevTools | 开发环境启用时会增加内存(类重载等) |
| GC 类型 | G1、ZGC、CMS 等对内存管理有差异 |
| 应用上下文复杂度 | Bean 数量越多,占用越高 |
🔍 实测参考(简单项目)
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "Hello";
}
}
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在这种情况下:
- 启动后观察 JVM 内存(可通过 JConsole、VisualVM 或
/actuator/metrics):- 堆内存使用:约 90–120 MB
- 总内存占用(RSS,操作系统层面):约 200–300 MB(包括堆外内存、线程栈、元空间等)
🚀 如何减少内存占用?
-
使用精简配置
java -Xms64m -Xmx128m -jar app.jar -
使用 Spring Boot 的 GraalVM Native Image(原生镜像)
- 内存可降至 20–50 MB
- 启动更快,但构建复杂
-
移除不必要的依赖
- 避免引入
spring-boot-starter-data-jpa等重型模块
- 避免引入
-
使用轻量级 Web 服务器
- Tomcat 默认嵌入,可替换为 Undertow 或 Jetty(差别不大)
✅ 总结
| 项目类型 | 堆内存使用 | 总内存(RSS) |
|---|---|---|
| 最简 Spring Boot Web | 80–120 MB | 200–300 MB |
| 中等复杂度(含 DB、Security) | 150–300 MB | 300–500 MB |
| 生产大型应用 | 500 MB+ | 1 GB+ |
| Native Image(GraalVM) | 20–50 MB | 50–100 MB |
所以,一个简单的 Spring Boot 项目通常占用 200–300 MB 的系统内存(RSS),其中 JVM 堆使用约 100 MB。
如果你追求低内存,可以考虑:
- 调整 JVM 参数
- 使用轻量框架(如 Micronaut、Quarkus)
- 编译为原生镜像
需要我帮你生成一个最小化内存的 Spring Boot 配置示例吗?
云知识