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编程语言编写的小程序和应用程序。
原文转自:https://www.iteye.com/blog/1074498745-2511320