JDK和JRE有什么区别? java
它们的做用是什么,什么时候应使用其中一个? shell
JRE是Java运行时环境 。 它是运行已编译的Java程序所需的全部程序的包,包括Java虚拟机(JVM),Java类库, java
命令和其余基础结构。 可是,它不能用于建立新程序。 编程
JDK是Java Development Kit ,这是Java的全功能SDK。 它具备JRE拥有的全部内容,还具备编译器( javac
)和工具(如javadoc
和jdb
)。 它可以建立和编译程序。 小程序
一般,若是只关心在计算机上运行Java程序,则只会安装JRE。 这就是您所须要的。 另外一方面,若是您打算进行一些Java编程,则须要安装JDK。 服务器
有时,即便您不打算在计算机上进行任何Java开发,也仍然须要安装JDK。 例如,若是要使用JSP部署Web应用程序,则从技术上讲,您只是在应用程序服务器内部运行Java程序。 那为何还要JDK呢? 由于应用服务器会将JSP转换为Java servlet,而且须要使用JDK来编译servlet。 我相信还有更多的例子。 oracle
上面的答案(巴勃罗)是正确的。 这只是附加信息。 app
顾名思义, JRE是一个环境 。 基本上,这是一堆包含Java相关文件的目录,例如: 编程语言
bin/
包含Java的可执行程序。 最重要的是java
(对于Windows,也包括javaw
),它将启动JVM。 这里还有一些其余实用程序,例如keytool
和policytool
。 conf/
拥有用户可编辑的配置文件,供Java专家使用。 lib/
具备大量的支持文件:一些.jar
,配置文件,属性文件,字体,翻译,证书等–全部Java的“修整”。 最重要的是modules
,该文件包含Java标准库的.class
文件。 bin/
或lib/
下包含一些.dll
(Windows)或.dylib
(macOS)或.so
(Linux)文件,并带有特定于系统的支持本机二进制代码。 JDK也是一组目录。 它是JRE的超集,其中有一些补充: 函数
bin/
已使用开发工具进行了扩展。 其中最重要的是javac
; 其余包括jar
, javadoc
和jshell
。 jmods/
,其中包含标准库的JMOD文件。 这些文件容许标准库与jlink
一块儿使用。 从Java官方网站... 工具
JRE(Java运行时环境):
JDK(Java开发套件)
从调试的角度来看,有一个区别:
要调试Java系统类(例如String和ArrayList),您须要使用“调试信息”编译的特殊版本的JRE。 JDK中包含的JRE提供了此信息,但常规JRE没有提供。 常规JRE不包含此信息以确保更好的性能。
什么是调试信息? 这是此博客文章的简要说明:
现代的编译器将其高级代码缩进和嵌套的控制结构以及任意类型的变量转换为一大堆称为机器代码(在Java中为字节码)的位,就能够很好地转换您的高级代码。在目标CPU(JVM的虚拟CPU)上尽量快地运行。 Java代码被转换为多个机器代码指令。 变量处处都是-放入堆栈,寄存器或彻底优化。 结构和对象甚至不存在于生成的代码中–它们只是一种抽象,能够转换为硬编码的偏移量到内存缓冲区中。
那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在何处中止? 当您询问变量值时,如何设法找到要显示的内容? 答案是–调试信息。
调试信息由编译器与机器代码一块儿生成。 它表示可执行程序和原始源代码之间的关系。 该信息被编码为预约义的格式,并与机器代码一块儿存储。 多年来,针对不一样的平台和可执行文件发明了许多此类格式。
JDK是JRE的超集,包含JRE中的全部内容,以及开发applet和应用程序所需的工具,例如编译器和调试器。 JRE提供了库,Java虚拟机(JVM)和其余组件,以运行用Java编程语言编写的小程序和应用程序。