JDK 和 JRE 有什么区别?

JDK 和 JRE 有什么区别?

它们的作用是什么,何时应使用其中一个?

答案

JREJava 运行时环境 。它是运行已编译的 Java 程序所需的一切的程序包,包括 Java 虚拟机(JVM),Java 类库, java命令和其他基础结构。但是,它不能用于创建新程序。

JDKJava Development Kit ,这是Java的全功能 SDK。它具有 JRE 拥有的所有内容,还具有编译器( javac )和工具(如javadocjdb )。它能够创建和编译程序。

通常,如果只关心在计算机上运行 Java 程序,则只会安装 JRE。这就是您所需要的。另一方面,如果您打算进行一些 Java 编程,则需要安装 JDK。

有时,即使您不打算在计算机上进行任何 Java 开发,也仍然需要安装 JDK。例如,如果要使用 JSP 部署 Web 应用程序,则从技术上讲,您只是在应用程序服务器内部运行 Java 程序。那为什么还要 JDK 呢?因为应用服务器会将 JSP 转换为 Java servlet,并且需要使用 JDK 来编译 servlet。我相信还有更多的例子。

上面的答案(巴勃罗)是非常正确的。这只是附加信息。

顾名思义, JRE是一个环境 。基本上,它是一堆带有 Java 相关文件的目录,例如:

  • bin/包含 Java 的可执行程序。最重要的是java (对于 Windows,也包括javaw ),它将启动 JVM。这里还有一些其他实用程序,例如keytoolpolicytool
  • conf/拥有用户可编辑的配置文件,供 Java 专家使用。
  • lib/具有大量支持文件:一些.jar ,配置文件,属性文件,字体,翻译,证书等 - 所有这些 Java 的 “修整”。最重要的是modules ,该文件包含 Java 标准库的.class文件。
  • 在某种程度上,Java 标准库需要调用本机代码。为此,JRE 在bin/lib/下包含一些.dll (Windows)或.dylib (macOS)或.so (Linux)文件,并带有支持的,系统特定的本机二进制代码。

JDK也是一组目录。它是 JRE 的超集,并具有一些附加功能:

  • bin/已使用开发工具进行了扩展。其中最重要的是javac ; 其他包括jarjavadocjshell
  • jmods/ ,其中包含标准库的 JMOD 文件。这些文件允许标准库与jlink一起使用。

在此处输入图片说明

JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发 applet 和应用程序所需的工具,例如编译器和调试器。 JRE 提供了库,Java 虚拟机(JVM)和其他组件,以运行用 Java 编程语言编写的小程序和应用程序。

用外行人的话来说:JDK 是祖父 JRE 是父亲,JVM 是他们的儿子。 [即 JDK> JRE> JVM]

JDK = JRE + 开发 / 调试工具

JRE = JVM + Java 包类(如 util,math,lang,awt,swing 等)+ 运行时库。

JVM = 类加载器系统 + 运行时数据区 + 执行引擎。

换句话说,如果您是 Java 程序员,则系统中将需要 JDK,并且该软件包还将包括 JRE 和 JVM,但是如果您是喜欢玩在线游戏的普通用户,则只需要 JRE,而该软件包将没有在其中的 JDK。

JVM:

Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。 JVM 无法理解 Java 源代码,这就是为什么您编译 * .java 文件以获得 * .class 文件的原因,这些文件包含 JVM 可以理解的字节码。它也是使 Java 成为 “便携式语言”(一次编写,可在任何地方运行)的实体。确实,JVM 有针对不同系统的特定实现(Windows,Linux,MacOS,请参见维基百科列表。。)的目的是,使用相同的字节码,它们都将产生相同的结果。

JDK 和 JRE

为了解释 JDK 和 JRE 之间的区别,最好是阅读 Oracle 文档并查阅下图:

Java 运行时环境(JRE)

Java 运行时环境(JRE)提供了库,Java 虚拟机和其他组件,以运行用 Java 编程语言编写的小程序和应用程序。另外,JRE 包含两种关键的部署技术:Java 插件,它使 applet 能够在流行的浏览器中运行; Java Web Start,它通过网络部署独立的应用程序。它也是 Java 2 平台企业版(J2EE)中用于企业软件开发和部署的技术的基础。 JRE 不包含用于开发 applet 和应用程序的工具和实用程序,例如编译器或调试器。

Java 开发套件(JDK)

JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发 applet 和应用程序所需的工具,例如编译器和调试器。

请注意,Oracle 不是唯一提供 JDK 的公司。

JIT 编译过程(由 Oracle 文档提供)

JDK> JRE> JVM

从 Java 官方网站...

JRE(Java 运行时环境):

  • 它是 Java 虚拟机 * 的实现,它实际上执行 Java 程序。
  • Java Runtime Environment 是运行 Java 程序所需的插件。
  • JRE 比 JDK 小,因此需要更少的磁盘空间。
  • 可以从https://www.java.com免费下载 / 支持 JRE。
  • 它包括 JVM,Core 库和其他附加组件,以运行用 Java 编写的应用程序和 applet。

JDK(Java 开发套件)

  • 它是一整套软件,可用于开发基于 Java 的应用程序。
  • 开发 Java 应用程序需要 Java Development Kit。
  • JDK 需要更多的磁盘空间,因为它包含 JRE 以及各种开发工具。
  • 可以从https://www.oracle.com/technetwork/java/javase/downloads/免费下载 / 支持 JDK。
  • 它包括 JRE,API 类集,Java 编译器,Webstart 以及编写 Java applet 和应用程序所需的其他文件。

从调试的角度来看,有一个区别:

要调试 Java 系统类(例如 String 和 ArrayList),您需要使用 “调试信息” 编译的特殊版本的 JRE。 JDK 中包含的 JRE 提供了此信息,但是常规 JRE 没有提供。常规 JRE 不包含此信息以确保更好的性能。

什么是调试信息?这是此博客文章的简要说明:

现代的编译器将其高级代码缩进和嵌套的控制结构以及任意类型的变量转换为一大堆称为机器代码(在 Java 中为字节码)的位,可以很好地转换您的高级代码。以在目标 CPU(JVM 的虚拟 CPU)上尽可能快地运行。 Java 代码被转换为多个机器代码指令。变量到处都是 - 放入堆栈,寄存器或完全优化。结构和对象甚至不存在于生成的代码中–它们只是一种抽象,可以转换为硬编码的偏移量到内存缓冲区中。

那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在何处停止?当您询问变量值时,如何找到要显示的内容?答案是–调试信息。

调试信息由编译器与机器代码一起生成。它表示可执行程序和原始源代码之间的关系。该信息被编码为预定义的格式,并与机器代码一起存储。多年来,针对不同的平台和可执行文件发明了许多此类格式。

杰瑞

JRE 是 Java Runtime Environment 的首字母缩写,用于提供运行时环境,它是 JVM 的实现,实际上存在,它包含 JVM 在运行时使用的一组库和其他文件。

JDK

JDK 是 Java Development Kit 的首字母缩写,它实际上存在,包含 JRE + 开发工具。

链接:-http: //www.javatpoint.com/difference-between-jdk-jre-and-jvm

通常,当您只关心在浏览器或计算机上运行 Java 程序时,只会安装 JRE。这就是您所需要的。另一方面,如果您打算进行一些 Java 编程,则还需要 JDK。

JVM,JRE 和 JDK 依赖于平台,因为每个 OS 的配置都不同。但是,Java 是平台无关的。

Java 虚拟机(JVM)是运行 Java 字节码的运行时系统。

JRE 是运行 Java 应用程序所需的环境(标准库和 JVM)。

JDK 包括 JRE 以及命令行开发工具,例如对于开发 applet 和应用程序必不可少或有用的编译器和调试器。

这是直接来自 Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/的简单响应

Java SE 运行时环境(JRE)

JRE 提供了运行 Java 编程语言编写的 applet 和应用程序所需的库,Java 虚拟机和其他组件。可以随应用程序一起重新分发此运行时环境,以使其独立。

Java SE 开发套件(JDK)

JDK 包括 JRE 以及命令行开发工具,例如对于开发 applet 和应用程序必不可少或有用的编译器和调试器。

如果要运行 Java 程序但不开发它们,请下载 Java 运行时环境或 JRE。如果要开发它们,请下载 Java Development kit 或 JDK

JDK

我们称 JDK 是一个工具包,其中包括开发和运行 Java 应用程序所需的那些东西。

JDK 作为用于构建应用程序,组件和小程序的开发环境而提供。

杰瑞

它包含以编译形式运行 Java 应用程序所需的一切。您不需要任何库和其他东西。您需要的所有东西都已编译。

JRE 不能用于开发,只能用于运行应用程序。