在服务器部署 Java 应用时,JRE(Java Runtime Environment)和 JDK(Java Development Kit)的核心区别在于用途和组成,这直接影响部署决策:
✅ 根本区别
| 项目 | JRE | JDK |
|---|---|---|
| 定位 | 运行环境(Runtime) | 开发工具包(Development + Runtime) |
| 主要用途 | 仅运行已编译的 Java 程序(.jar/.class) |
开发、编译、调试、运行 Java 程序(含 javac, javadoc, jdb, jstat 等工具) |
| 是否包含 JVM? | ✅ 是(核心组件) | ✅ 是(JDK 内置 JRE,含 JVM) |
是否包含 javac 编译器? |
❌ 否(无法编译 .java 源码) |
✅ 是(必须用于编译) |
| 典型体积 | 较小(约 50–100 MB) | 较大(约 200–400+ MB,含文档、源码、工具等) |
🚀 服务器部署场景建议
| 场景 | 推荐 | 原因 |
|---|---|---|
生产环境部署已打包的 .jar(如 Spring Boot fat jar)或 WAR 包 |
✅ JRE 足够(更推荐) | • 无需编译/调试 • 攻击面更小(无 javac、jshell 等非必要工具)• 占用磁盘/内存更少 • 符合最小权限原则(安全最佳实践) |
| 生产环境需热更新、JVM 诊断、性能调优(如 GC 日志分析、JFR、JMX 监控) | ✅ 仍可用 JRE,但部分高级工具需 JDK | • jstat, jinfo, jmap, jstack 等诊断工具在 JDK 的 bin/ 目录下,但 现代 JRE(JDK 11+)已将这些工具移入 JRE(见下方说明)• 实际上:从 JDK 11 开始,JRE 不再单独发布,官方只提供 JDK;用户需从 JDK 中选择性部署(如仅复制 jre/ 目录或使用 jlink 定制运行时) |
| CI/CD 构建服务器(打包应用) | ✅ 必须 JDK | • 需要 javac 编译源码• 需要 jar/jpackage 打包• 可能需要 jdeps 分析依赖等 |
| 开发/测试服务器(需动态编译、热部署、调试) | ✅ JDK 更合适 | • 支持远程调试(-agentlib:jdwp)、JSP 编译(Tomcat)、Groovy/JSR-223 脚本等 |
⚠️ 重要演进(JDK 11+ 关键变化)
- 🔹 Oracle 自 JDK 11 起不再提供独立 JRE 下载(JEP 330),JDK 成为唯一分发形式。
- 🔹 但你可以:
- 使用
jlink工具构建自定义最小化运行时镜像(仅含应用所需模块),比传统 JRE 更轻量、更安全; - 或从 JDK 目录中提取
jre/子目录(旧版 JDK 8/9/10)或直接使用bin/+jmods/(JDK 11+);
- 使用
- 🔹
jps,jstat,jstack等工具 在 JDK 11+ 中默认包含在$JAVA_HOME/bin/下,即使你只部署 JDK 的运行时部分(不安装完整 JDK),只要保留bin/和lib/,这些诊断工具依然可用。
✅ 最佳实践总结(生产部署)
| 项目 | 推荐做法 |
|---|---|
| 首选方案 | ▶ 使用 JDK 17/21 LTS(长期支持版),通过 jlink 构建精简运行时,或直接部署完整 JDK(现代云环境磁盘/内存成本低,且工具链统一) |
| 安全加固 | ▶ 移除 bin/ 中非必需工具(如 jshell, jjs, rmic);限制 JAVA_HOME 权限;禁用不安全协议(如 RMI 注册表) |
| 容器化(Docker) | ▶ 使用官方 eclipse-temurin:17-jre-jammy(实际是 JDK 衍生的精简 JRE 镜像)或 --jre 标签镜像;避免 *-jdk 镜像(除非需编译) |
| 验证命令 | bash<br>java -version # 确认运行时<br>java -XshowSettings:properties -version 2>/dev/null | grep java.home<br>which javac # 生产环境应返回空(若存在则需检查)<br> |
✅ 一句话结论:
生产服务器部署已编译的 Java 应用,理论上只需 JRE;但自 JDK 11 起官方不再分发独立 JRE,推荐使用 LTS 版 JDK 并通过
jlink或容器镜像实现最小化运行时——兼顾安全性、可维护性与工具可用性。
如需具体操作示例(如 jlink 构建 Spring Boot 运行时、Dockerfile 优化、JVM 参数调优),欢迎继续提问! 🌟
CLOUD云枢