导读:本期聚焦于小伙伴创作的《Java里的JDK和JRE到底有什么区别?一文讲清Java运行环境组成》,敬请观看详情。不少初学者装完Java后分不清该下哪个包。JRE是Java运行时环境,只包含虚拟机与核心类库,能让编译好的class文件跑起来;JDK除JRE外还带编译器、调试器和开发工具。若只部署服务选JRE足够,写代码则必须装JDK。二者目录结构差异明显,JDK的bin里多了javac等命令,JRE的bin主要是java启动器。搞清楚组成能避免环境配置出错,也方便排查找不到类的故障。

Java开发者在搭建环境时,常会碰到JDK与JRE这两个名词。简单来说,JRE负责让Java程序运行,JDK负责把Java源码变成可运行的程序,同时也会附带上JRE。理解它们的组成,是配置环境与排查故障的基础。

Java里的JDK和JRE到底有什么区别?一文讲清Java运行环境组成

JRE的组成与定位

JRE全称为Java Runtime Environment,也就是Java运行时环境。它面向的是已经编译完成的Java应用程序使用者,而不是开发者。只要机器上安装了对应版本的JRE,就可以执行打包好的jar文件或class文件,不需要关心源码是怎么写的。

从目录结构看,JRE主要包含两部分:一是Java虚拟机,也就是常说的JVM,它负责把字节码翻译成当前操作系统能执行的指令;二是核心类库,例如java.lang、java.util等基础包,它们以jar形式放在lib目录中。在JRE的bin目录下,最核心的命令就是java,用来启动虚拟机并加载程序。

下面是一个仅使用JRE就能运行的场景示例,假设我们已经有编译后的Main.class:

# 只安装JRE的环境变量检查
java -version

# 直接运行已有class文件
java Main

可以看到,没有javac也能完成运行,这正是JRE的设计目的。它把开发工具剥离,减小体积,专注执行。

JDK的组成与定位

JDK全称为Java Development Kit,即Java开发工具包。它不仅是运行环境,更是一整套开发套件。安装JDK后,其目录里会包含一个完整的JRE子目录,此外还有bin中的编译器javac、打包工具jar、文档生成javadoc以及调试工具jdb等。

开发者写好的.java源文件,必须先通过javac编译成.class字节码,这一步只能由JDK提供。JRE本身没有编译能力。因此,任何写代码、做构建的机器都必须装JDK,而生产服务器如果只跑服务,理论上升级到只装JRE也能节省空间,不过现在很多部署方式直接带JDK以方便排查。

下面的代码展示了用JDK从源码到运行的完整链路:

// 源文件 Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("由JDK编译运行");
    }
}
# 使用JDK的javac编译
javac Hello.java

# 使用java命令运行,底层调用JRE
java Hello

如果没有JDK,第一步javac就会报命令找不到,这直观体现了二者的能力边界。

二者关系与选择建议

从包含关系上看,JDK包含JRE,JRE包含JVM加类库。可以用一张简单表格说明差异:

对比项JDKJRE
是否含编译器有javac
是否含JVM含(通过内嵌JRE)
适用角色开发者程序使用者
体积较大较小

在实际项目中,本地开发机毫无疑问装JDK。至于线上容器,若采用Spring Boot这类自带依赖的fat jar,用JRE运行即可;但若需要在服务器上现场编译脚本或用工具诊断,保留JDK更省心。另外注意,版本要匹配,用JDK 8编的程序放到只支持JRE 7的环境会抛出版本不支持错误。

理清JDK与JRE的组成,还能帮你看懂很多报错。例如提示找不到tools.jar,说明你用的环境是纯JRE,而某些构建工具需要JDK里的类。此时补装JDK而非JRE就能解决。

常见误区说明

有人以为JRE里也有编译器,只是没暴露命令,这是错的。JRE的bin中确实没有javac,也没有源码级调试接口。另一个误区是认为装了JDK就不用管JRE,其实JDK内部的jre目录就是它自带的运行环境,系统变量若配错,可能用到了旧JRE跑新代码。

建议配置JAVA_HOME指向JDK根目录,并把%JAVA_HOME%/bin放在PATH最前,这样既能用javac也能用java,且版本统一。若只配了JRE路径,协作时别人拉下代码就编不过,徒增沟通成本。

总结来看,JDK和JRE的区别核心在开发能力的有无,而不是运行能力的强弱。JRE专注执行,JDK覆盖开发到执行的全流程。按角色选包,按版本配路径,Java环境就能稳稳当当。

JDKJREJava运行环境修改时间:2026-08-07 09:57:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。