JRE和JDK的区别?
1.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。 我相信还有更多的例子。
2.顾名思义, JRE是一个环境 。 基本上,这是一堆包含Java相关文件的目录,例如:
bin/包含Java的可执行程序。 最重要的是java (对于Windows,也包括javaw ),它将启动JVM。 这里还有一些其余实用程序,例如keytool和policytool 。
conf/拥有用户可编辑的配置文件,供Java专家使用。
lib/具备大量的支持文件:一些.jar ,配置文件,属性文件,字体,翻译,证书等–全部Java的“修整”。 最重要的是modules ,该文件包含Java标准库的.class文件。
在某种程度上,Java标准库须要调用本机代码。 为此,JRE在bin/或lib/下包含一些.dll (Windows)或.dylib (macOS)或.so (Linux)文件,并带有特定于系统的支持本机二进制代码。
JDK也是一组目录。 它是JRE的超集,其中有一些补充:bin/已使用开发工具进行了扩展。 其中最重要的是javac ; 其余包括jar , javadoc和jshell 。
jmods/ ,其中包含标准库的JMOD文件。 这些文件容许标准库与jlink一块儿使用。
3.从Java官方网站...
JRE(Java运行时环境):
它是Java虚拟机*的实现,它实际上执行Java程序。
Java Runtime Environment是运行Java程序所需的插件。
JRE比JDK小,所以须要更少的磁盘空间。
它包括JVM,Core库和其余附加组件,以运行用Java编写的应用程序和applet。
JDK(Java开发套件)
它是一整套软件,可用于开发基于Java的应用程序。
开发Java应用程序须要Java Development Kit。
JDK须要更多的磁盘空间,由于它包含JRE以及各类开发工具。它包括JRE,API类集,Java编译器,Webstart以及编写Java applet和应用程序所需的其余文件。
4.从调试的角度来看,有一个区别:
要调试Java系统类(例如String和ArrayList),您须要使用“调试信息”编译的特殊版本的JRE。 JDK中包含的JRE提供了此信息,但常规JRE没有提供。 常规JRE不包含此信息以确保更好的性能。
什么是调试信息?
现代的编译器将其高级代码缩进和嵌套的控制结构以及任意类型的变量转换为一大堆称为机器代码(在Java中为字节码)的位,就能够很好地转换您的高级代码。在目标CPU(JVM的虚拟CPU)上尽量快地运行。 Java代码被转换为多个机器代码指令。 变量处处都是-放入堆栈,寄存器或彻底优化。 结构和对象甚至不存在于生成的代码中–它们只是一种抽象,能够转换为硬编码的偏移量到内存缓冲区中。
那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在何处中止? 当您询问变量值时,如何设法找到要显示的内容? 答案是–调试信息。
调试信息由编译器与机器代码一块儿生成。 它表示可执行程序和原始源代码之间的关系。 该信息被编码为预约义的格式,并与机器代码一块儿存储。 多年来,针对不一样的平台和可执行文件发明了许多此类格式。
5.JDK是JRE的超集,包含JRE中的全部内容,以及开发applet和应用程序所需的工具,例如编译器和调试器。 JRE提供了库,Java虚拟机(JVM)和其余组件,以运行用Java编程语言编写的小程序和应用程序。
更多java干货,可评论或者私信我!java