360

JVMJDKJREOpenJDK之间有什么区别?

我在用Java编程时遇到了这些短语,它们之间有什么区别?

4

22 回答 22

392

虚拟机

Java 虚拟机(JVM) 是运行 Java 字节码的虚拟机。JVM 不理解 Java 源代码;这就是为什么您需要编译*.java文件以获取*.class包含 JVM 可以理解的字节码的文件。它也是使 Java 成为“可移植语言”(一次编写,随处运行)的实体。事实上,JVM 有针对不同系统(Windows、Linux、macOS,参见 Wikipedia 列表)的特定实现,目的是使用相同的字节码,它们都给出相同的结果。

JDK 和 JRE

要解释JDK和JRE之间的区别,最好阅读Oracle文档并参考图表:

Java 运行时环境 (JRE)

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

Java 开发工具包 (JDK)

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

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

OpenJDK

OpenJDK是 JDK 的开源实现,也是 Oracle JDK 的基础。Oracle JDK 和 OpenJDK 几乎没有区别。

此博客中说明了差异:

问:在 OpenJDK 存储库中找到的源代码与您用于构建 Oracle JDK 的代码有什么区别?

答:非常接近——我们的 Oracle JDK 版本的构建过程是在 OpenJDK 7 上构建的,只添加了几个部分,例如部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart 实现,以及一些封闭源代码的第三方第三方组件,例如图形光栅化器,一些开源第三方组件,例如 Rhino,以及一些零碎的东西,例如附加文档或第三方字体。展望未来,我们的目标是开源 Oracle JDK 的所有部分,除了那些我们认为商业功能的部分,例如 JRockit Mission Control(Oracle JDK 中尚不可用),并用开源替代品替换受阻的第三方组件以实现更接近的平等代码库之间。

JDK 11 的更新

Donald Smith 的一篇文章试图消除 Oracle JDK 和 Oracle 的 OpenJDK 之间的区别:https ://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later

正如@Alan Evangelista 在评论中提到的,Java Web Start 在 Java SE 9 中已被 Oracle 弃用,并在 Java SE 11 中被删除。

于 2012-07-20T13:26:36.297 回答
100

JVM 是 Java 虚拟机——它实际上运行 Java ByteCode。

JRE 是 Java 运行时环境——它包含一个 JVM 等,是运行 Java 程序所需要的。

JDK 是 Java 开发工具包——它是 JRE,但添加了 javac(这是编译 Java 源代码所需的)和其他编程工具。

OpenJDK 是一个特定的 JDK 实现。

于 2012-07-18T17:59:03.130 回答
49

JDK(Java 开发工具包)

Java Developer Kit 包含开发 Java 程序所需的工具,以及运行程序所需的 JRE。工具包括编译器(javac.exe)、Java应用程序启动器(java.exe)、Appletviewer等……</p>

编译器将 java 代码转换为字节码。Java 应用程序启动器打开一个 JRE,加载该类,并调用它的 main 方法。

如果您想编写自己的程序并编译它们,您需要 JDK。对于运行 java 程序,JRE 就足够了。

JRE 的目标是执行 Java 文件

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

JDK主要针对java开发。即您可以创建一个Java 文件(借助Java 包)、编译一个Java 文件并运行一个Java 文件。

JRE(Java 运行时环境)

Java 运行时环境包含 JVM、类库和其他支持文件。它不包含任何开发工具,如编译器、调试器等。实际上JVM 运行程序,它使用JRE 中提供的类库和其他支持文件。如果你想运行任何java程序,你需要在系统中安装JRE

Java 虚拟机提供了一种独立于平台的代码执行方式;这意味着在任何机器上编译一次并在任何地方(任何机器)运行它。

JVM(Java虚拟机)

众所周知,当我们编译 Java 文件时,输出不是“exe”而是“.class”文件。'.class' 文件由 JVM 可以理解的 Java 字节码组成。Java 虚拟机根据底层操作系统和硬件组合将字节码解释为机器码。它负责垃圾收集、数组边界检查等所有事情……JVM 是平台相关的。

JVM 之所以称为“虚拟”,是因为它提供了一个不依赖于底层操作系统和机器硬件架构的机器接口。这种对硬件和操作系统的独立性是 Java 程序的一次写入随处运行价值的基石。

那里有不同的JVM实现。这些可能在性能、可靠性、速度等方面有所不同。这些实现将在 Java 规范未提及如何实现这些功能的领域有所不同,例如垃圾收集过程的工作方式取决于 JVM,Java 规范没有定义任何特定的方式来做到这一点。

于 2013-06-14T03:42:16.707 回答
25

Java 虚拟机 (JVM)是可以执行 Java ByteCode 的虚拟机。它是Java软件平台的代码执行组件。

Java Development Kit (JDK)是 Oracle Corporation 针对 Java 开发人员的产品。自 Java 推出以来,它一直是迄今为止使用最广泛的 Java 软件开发工具包 (SDK)。

Java Runtime Environment,也称为Java Runtime、Runtime Environment

OpenJDK(Open Java Development Kit)是 Java 编程语言的免费开源实现。这是 Sun Microsystems 于 2006 年开始努力的结果。该实现是根据 GNU 通用公共许可证 (GPL) 许可的,但有一个链接例外。

于 2012-07-18T18:02:31.000 回答
18

JVM是 Java 代码在其上执行的虚拟机

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

JDK是具有开发人员工具和文档的 JRE

OpenJDK是 JDK 的开源版本,不同于 Oracle 拥有的普通 JDK

于 2012-07-18T18:01:22.403 回答
15

JDK(Java 开发工具包):

  • 包含开发 Java 程序所需的工具。
  • 如果您想编写自己的程序并编译它们,您需要 JDK。
  • JDK主要针对java开发。

JRE(Java 运行时环境)

Java 运行时环境包含 JVM、类库和其他支持文件。JRE 的目标是执行 Java 文件。

JVM(Java虚拟机)

JVM根据底层操作系统和硬件组合将字节码解释为机器码。它负责垃圾收集、数组边界检查等所有事情……Java 虚拟机提供了一种与平台无关的代码执行方式。

于 2013-07-14T23:27:35.397 回答
6

JDK - 将 java 编译为字节码。由调试器、编译器等组成。

javac file.java // Is executed using JDK

JVM - 执行字节码。JVM是使Java平台独立的一种。但是 JVM 因平台而异。

JRE - JVM 与 java 运行时库一起执行 java 程序。

于 2015-07-31T16:54:44.947 回答
4

另一个值得一提的方面:

JDK(Java开发工具包)

顾名思义,您将需要它用于开发目的。

例如:一家软件公司将在他们的计算机上安装 JDK,因为他们需要开发新的软件,这也涉及编译和运行他们的 Java 程序。

所以我们可以说JDK = JRE + JVM。

JRE(Java 运行时环境)

它是运行 Java 程序所必需的。你不能用它编译 Java 程序。

例如:一个普通的计算机用户想要运行一些网络游戏,那么他的系统中需要 JRE 来运行 Java 程序。

JVM(Java虚拟机)

您可能知道它运行字节码。它使 Java 平台独立,因为它执行.class您在编译 Java 程序后获得的文件,无论您是在 Windows、Mac 还是 Linux 上编译它。

打开 JDK

嗯,就像我上面说的。现在 JDK 是由不同的公司制造的,其中一个恰好是开源且免费供公众使用的是 OpenJDK,而其他一些是 Oracle Corporation 的 JRockit JDK 或 IBM JDK。

然而,对于一般用户来说,它们可能看起来都一样。

结论

如果您是 Java 程序员,您的系统中将需要 JDK,并且此软件包中还将包含 JRE 和 JVM,但如果您是喜欢玩网络游戏的普通用户,则您只需要 JRE,此软件包中不会包含 JDK .

换句话说,JDK 是祖父 JRE 是父亲,JVM 是他们的儿子。

于 2013-05-03T19:08:49.943 回答
4

Java 是一种语言,包括严格且强类型的语法。

Java 2 Platform, Standard Edition,也称为 J2SE,指的是该平台,并包括 java.lang 和 java.io 包中的类等。它是构建 Java 应用程序的基石。

Java 虚拟机或 JVM 是运行已编译 Java 代码的软件虚拟机。因为编译后的 Java 代码仅仅是字节码,JVM 负责在运行之前将该字节码编译为机器码。(这通常称为即时编译器或 JIT 编译器。)JVM 还负责内存管理,因此应用程序代码不必这样做。

Java 开发工具包或 JDK 过去和现在都是 Java 开发人员用来创建 Java 应用程序的软件。它包含一个 Java 语言编译器、一个文档生成器、用于处理本机代码的工具,以及(通常)平台的 Java 源代码,以启用调试平台类。

Java 运行时环境 (JRE) 曾经是并且仍然是最终用户下载以运行已编译的 Java 应用程序的软件。它包含一个 JVM,但不包含任何捆绑在 JDK 中的开发工具。但是,JDK 确实包含 JRE。

于 2014-07-16T17:07:51.827 回答
4

JVM :描述运行 java 程序的方式/资源的规范。实际执行字节码并使java平台独立。这样做,对于不同的平台是不同的。Windows 的 JVM 不能作为 UNIX 的 JVM。

JRE: JVM 的实现。(JVM + 运行时库)

JDK: JRE + java编译器和其他从零开始构建java程序的必备工具

于 2015-08-06T03:30:48.727 回答
2

JVM:这实际上意味着字节码解释器。它依赖于平台。例如:在Windows 平台中,' java.exe ' 或' javaw.exe ' 进程是jvm 进程。

JDK:是一个工具包,包含开发和执行java程序/应用程序所需的库和实用程序

JRE:是java应用程序的执行环境。即,它只支持编译程序的运行时依赖,包括jvm。如果我们想编译一个java程序,我们需要jdk。

于 2013-10-10T09:15:50.473 回答
2

虚拟机

JVM(Java虚拟机)是一种抽象机器。它是一种提供运行时环境的规范,可以在其中执行 java 字节码。JVM 可用于许多硬件和软件平台。

JRE

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

JDK

JDK是Java Development Kit的首字母缩写。它物理存在。它包含JRE+开发工具。

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

于 2015-04-21T08:12:19.730 回答
2

JVM:java的虚拟机。告诉机器如何处理 Java 代码。您不能按原样下载 JVM。它包装在其他一些组件中。

JRE:上面提到的其他一些组件是 JRE。创建运行时环境是 JVM+ 其他 jars

JDK:包含 JRE(它又包含 JVM)。获得 JDK 后,您无需单独安装 JRE 和 JVM。它包含编译器,可将您的 .java 文件编译为 .class 文件

于 2017-01-15T11:02:50.403 回答
2

总之:

  • JRE = JVM + Java 包(如 util、math、lang、awt、swing 等)+ 运行时库
  • JDK = JRE + 开发/调试工具

如果你想用java开发,你需要JDK,但如果你只想运行java,你需要JRE。

于 2020-06-04T21:41:54.327 回答
2
  1. 开发者使用JDK进行开发,首先我们编写.java源代码
  2. 开发者调试代码并将代码编译成JRE中的.class字节码可执行文件
  3. 可执行文件由JVM执行,将字节码转换为机器可以执行的本机机器码

在此处输入图像描述

这是他们的关系:

在此处输入图像描述

参考:
Java JDK、JRE 和 JVM

于 2021-08-31T00:07:29.883 回答
1

JDK -javac用于将*.java 文件编译为 *.class 字节码文件的工具(主要是开发 Java 程序)

JRE -运行*.jar 文件的工具(基本上运行 Java 程序)

JVM - 将*.class 文件编译为可执行机器代码的工具(运行所有 Java 字节码)

OpenJDK 只是 Java JDK 的一个发行版。

于 2021-10-21T05:13:48.000 回答
1

用于说明 JDK、JRE、JDK 的简单图像。JDK、JRE、JVM

JDK通常,它只会安装在开发设置中,例如开发人员、公司公司的实时 QA 系统。在服务器中运行的原始代码将没有 JDK。

JRE是 JDK 的一部分,也可以独立安装在服务器中。在为用户请求提供服务的实时服务器中,将仅安装 JRE 和开发人员开发的代码(*.class 格式)

JVM Developer 开发代码 > 在开发机器中测试和执行。执行阶段需要 Java 的媒介。

.class 文件不是本机代码(cpu 可以理解的代码)。如果将.java文件直接转换为本机代码,就无法实现WO​​RA(Write Once Run Anywhere)的概念。

本机代码因操作系统而异。因此,Java 创建了一个名为 .class 的中间文件和一个名为“JVM”的神奇程序。它的 JVM 有责任将 .class 转换为本机代码。

于 2022-01-15T19:25:37.373 回答
0

JVM Java 虚拟机,实际执行的是 java 字节码。它是JAVA平台上的执行块。它将字节码转换为机器码。

JRE Java Runtime Environment ,提供执行 Java 应用程序的最低要求;它由 Java 虚拟机 (JVM)、核心类和支持文件组成。

JDK Java Development Kit,它拥有开发应用软件的所有工具。它就像 JRE+JVM

Open JDK 是 Java 平台的免费和开源实现。

于 2014-10-25T07:12:09.323 回答
0

用外行的话来说:- JDK = JRE + 开发/调试工具,其中 JDK 是我们使用 Java 的完整包,从创建编译到运行它。另一方面,JRE 只是运行代码(字节码)。

注意:- 无论我们是安装 JDK 还是 JRE,JVM 都会与这两个软件包捆绑在一起,而 JVM 是 JIT 编译器将字节码转换为机器特定代码的部分。

只需阅读有关JDK、JRE、JVM 和 JIT的文章

于 2015-02-11T15:40:12.103 回答
0

JDK:你需要编写和运行java代码的完整包

OpenJDK:JDK 的独立实现,使其变得更好

JVM:将 Java 代码转换为字节码,并提供规范说明如何编译、加载、验证、检查错误和执行 Java 代码。

JRE:JVM的实现,一些Java库用于运行程序

于 2016-08-24T11:49:56.050 回答
0

JRE执行应用程序,但 JVM 逐行读取指令,因此它是解释器。

JDK =JRE+开发工具

JRE =JVM+库类

于 2017-04-21T16:20:07.103 回答
0

JVM简称 Java Virtual Machine,JVM是Java架构的主要组成部分。JVM 是用 C 编程语言编写的。Java 编译器为 JVM 生成字节码。JVM 读取字节码验证字节码并将代码与库链接。

JRE缩写为Java Runtime Environment。它在运行时提供环境。它是物理存在的。它包含 JVM + 库集(jar)+其他文件。

JDK缩写为 Java Development Kit。它是开发Java应用程序。还有调试和监控java应用程序。JDK包含JRE+开发工具(javac,java)

OpenJDK OpenJDK 是 sun JDK 的开源版本。Oracle JDK 是 Sun 的官方 JDK。

于 2018-12-14T14:06:06.050 回答