JVM,JDK,JRE和OpenJDK有什么区别?


Answers:


375

虚拟机

Java虚拟机(JVM)是运行Java字节代码的虚拟机。JVM无法理解Java源代码;这就是为什么需要编译*.java文件以获取*.class包含JVM理解的字节码的文件的原因。它也是使Java成为“便携式语言”的实体(编写一次,在任何地方运行)。实际上,对于不同的系统(Windows,Linux,macOS,请参阅Wikipedia列表),有JVM的特定实现,目的是使用相同的字节码,它们都给出相同的结果。

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的公司。

OpenJDK的

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

差异在此博客中说明:

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

答:非常接近-我们针对Oracle JDK的构建过程是在OpenJDK 7上构建的,仅添加了几部分,例如部署代码,其中包括Oracle对Java Plugin和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-然后


@ alain.janinm,那么您会选择OracleJDK还是OpenJDK进行开发?
Pacerier,2014年

@Pacerier我曾经在工作中使用OracleJDK,但我对OpenJDK却一无所知:)实际上,我从未偶然发现过让我在它们之间进行选择的具体差异。如果您更喜欢开源并且不需要使用专有许可证,则可以使用OpenJDK。
alain.janinm 2014年

1
请告诉我我是否正确:关于以下方面:基本上,没有JRE,就无法运行真正的Java应用程序。因此,所有下载(也许除了一些针对开发人员的奇特东西)都包含JVM和JRE(如果不是超集JDK)?
Mads Skjern

8
@MadsSkjern是的,您需要一个JRE来运行Java应用程序。但是,当您下载Java应用程序时,它并不随JRE一起提供,它期望您的计算机上已安装了一个Java应用程序。
alain.janinm 2015年

92

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

JRE是Java Runtime Environment,它包含JVM等,这是运行Java程序所需要的。

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

OpenJDK是特定的JDK实现。


3
可能是因为您没有提及other thingsJVM中包含的内容。这些是什么 ?本文是否完全回答了这个问题-javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad

OpenJDK包含JVM,它是JVM规范的实现之一。Oracle JDK包含JVM规范的另一种实现
AKh,2018年

46

JDK(Java开发套件)

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

编译器将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规范则没有定义执行此操作的任何特定方式。


23

Java虚拟机(JVM)是能够执行Java字节码的虚拟机。它是Java软件平台的代码执行组件。

Java开发工具包(JDK)是Oracle公司的产品针对Java开发人员。自从Java引入以来,它一直是使用最广泛的Java软件开发工具包(SDK)。

Java Runtime Environment,也称为Java Runtime Runtime Environment

OpenJDK(开放Java开发工具包)是Java编程语言的免费开源实现。这是Sun Microsystems于2006年开始的努力的结果。该实现已获得GNU通用公共许可证(GPL)的许可,但有链接例外。


好的答案,但有一个澄清。别人比甲骨文产品的JDK -例如IBM为AIX和z / OS,惠普HP-UX等。
特伦特灰色唐纳德·

16

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

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

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

OpenJDK是JDK的开源版本,与Oracle拥有的通用JDK不同


15

JDK(Java开发套件):

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

JRE(Java运行时环境)

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

JVM(Java虚拟机)

JVM 根据底层操作系统和硬件组合将字节码解释为机器码。它负责诸如垃圾收集,数组边界检查等所有工作。Java虚拟机提供了一种独立于平台的执行代码的方式。


6

JDK -编译的Java字节码。包括调试器,编译器等。

javac file.java // Is executed using JDK

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

JRE -JVM和Java运行时库一起执行Java程序。


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是他们的儿子。


9
您的帖子到处都是错误的。JRE(运行时环境)包含JVM(虚拟机)和Java类库。JDK包含JRE和许多用于开发人员的编程工具。en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine在修复它时回复我的评论,我将删除下一篇投票。
nhahtdh

@nhahtdh可以说:jdk是独立软件包,可以下载,单独安装。Jre =一些类+ Java插件+ JVM
Prakash Pandey

3

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 Runtime Environment或JRE曾经是,而且仍然是最终用户下载以运行已编译Java应用程序的软件。它包含一个JVM,但不包含JDK中捆绑的任何开发工具。但是,JDK确实包含一个JRE。


3

JVM:一种规范,描述了运行Java程序的方式/资源。实际执行字节代码并使Java平台独立。这样做对于不同的平台是不同的。Windows的JVM无法用作UNIX的JVM。

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

JDK: JRE + Java编译器和其他从头开始构建Java程序的基本工具


2

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

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

JRE:是Java应用程序的执行环境。即,它仅支持运行时依赖项,包括已编译程序的jvm。如果要编译Java程序,则需要jdk。


2

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

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

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


2

虚拟机

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

杰瑞

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

JDK

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

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


1

综上所述:

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

如果要使用Java开发,则需要JDK,但是如果只想运行Java,则需要JRE。


0

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

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

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

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


0

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

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

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


0

JDK:您需要编写和运行Java代码的完整软件包

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

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

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


0

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

JDK = JRE +开发工具

JRE = JVM +库类


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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.