阐明 `JDK`、`JRE`、`JVM` 三者包含关系与职责
JDK(Java Development Kit)是 Java 开发工具包,包含编译器和调试工具;JRE(Java Runtime Environment)是运行环境,包含核心类库和 JVM;JVM(Java Virtual Machine)是虚拟机,负责将字节码翻译成机器码。三者构成包含关系:JDK > JRE > JVM。开发者安装 JDK,而仅需运行程序的服务器安装 JRE 即可。
诊断题
JDK 已经包含了 JRE,为什么在现代 Java 开发中,部署生产环境时往往只单独安装 JRE 或者更精简的运行时镜像,而不是直接部署完整的 JDK?答案骨架
我能理清三者的层级
JVM是核心抽象计算机,负责执行.class字节码,是实现跨平台的基础JRE包含JVM和运行所需的基础类库(如java.lang等)JDK是面向开发者的,在JRE基础上增加了javac、javadoc等开发工具- 适用边界上,开发机必装
JDK,仅需运行的环境装JRE即可,以减少体积和安全风险。
边界追问
JRE,突然需要在线上动态编译一段 .java 代码,这能成功吗?为什么?边界答案
JRE 仅提供运行时环境,不包含 javac 等编译工具。若需动态编译 .java 文件,必须引入包含编译器的 JDK,或使用第三方的动态编译库。记忆锚点
JDK 造车带工具,JRE 开车上马路,JVM 引擎跑字节码。衍生拓展
- 探索 Java 9 引入的模块化系统对
JRE结构的改变。 - 了解
jlink工具如何生成自定义的轻量级JRE镜像。 - 比较不同厂商(Oracle, OpenJDK)的
JDK授权差异。
落地场景
假设我们要运行一个 Java 程序。开发时使用 JDK 中的 javac 将 Main.java 编译为字节码:javac
javac Main.java
。随后在测试环境中,只需 JRE 即可执行该程序,因为 JRE 中的 JVM 能够解释或即时编译这些 .class 文件:java
java Main
。