JVM , JDK , JRE &的的OpenJDK
我是用Java编程的,我遇到了这些短语,它们之间有什么不同?
答案 0 :(得分:354)
Java虚拟机(JVM)是运行Java字节码的虚拟机。 JVM不了解Java源代码;这就是为什么你需要编译你的*.java
文件来获取包含JVM理解的字节码的*.class
文件。它也是允许Java成为“可移植语言”的实体(一次编写,随处运行)。实际上,JVM的特定实现适用于不同的系统(Windows,Linux,macOS,see the Wikipedia list),目的是使用相同的字节码,它们都会产生相同的结果。
要解释JDK和JRE之间的区别,最好阅读Oracle documentation并参考图表:
Java运行时环境(JRE)
Java Runtime Environment(JRE)提供库,Java虚拟机和其他组件来运行用Java编程语言编写的applet和应用程序。此外,两个关键的部署技术是JRE的一部分:Java Plug-in,它使applet能够在流行的浏览器中运行;和Java Web Start,它通过网络部署独立应用程序。它也是用于企业软件开发和部署的Java 2平台企业版(J2EE)中的技术的基础。 JRE不包含用于开发applet和应用程序的工具和实用程序,如编译器或调试器。
Java开发工具包(JDK)
JDK是JRE的超集,包含JRE中的所有内容,以及开发applet和应用程序所需的编译器和调试器等工具。
请注意,Oracle并不是唯一提供JDK的人。
OpenJDK 是JDK的开源实现,也是Oracle JDK的基础。 Oracle JDK和OpenJDK之间几乎没有区别。
差异在此blog中说明:
问: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
答案 1 :(得分:82)
JVM是Java虚拟机 - 它实际上运行Java ByteCode。
JRE是Java运行时环境 - 它包含一个JVM,以及运行Java程序所需的内容。
JDK是Java开发工具包 - 它是JRE,但是使用javac(这是编译Java源代码所需的)和其他编程工具。
OpenJDK是一个特定的JDK实现。
答案 2 :(得分:45)
JDK(Java开发工具包)
Java Developer Kit包含开发Java程序所需的工具,以及运行程序的JRE。这些工具包括编译器(javac.exe),Java应用程序启动器(java.exe),Appletviewer等......
编译器将java代码转换为字节代码。 Java应用程序启动器打开一个JRE,加载该类,并调用其主方法。
你需要JDK,如果你想编写自己的程序,并编译它们。对于运行java程序,JRE就足够了。
JRE的目标是执行Java文件
即。 JRE = JVM + Java包类(如util,math,lang,awt,swing等)+运行时库。
JDK主要针对Java开发。即您可以创建Java文件(借助Java包),编译Java文件并运行java文件。
JRE(Java运行时环境)
Java Runtime Environment包含JVM,类库和其他支持文件。它不包含任何开发工具,如编译器,调试器等。实际上JVM运行程序,它使用类库和JRE中提供的其他支持文件。如果要运行任何java程序,则需要在系统中安装JRE
Java虚拟机提供了一种独立于平台的执行代码的方式; 这意味着在任何机器中编译一次并在任何地方(任何机器)运行它。
JVM(Java虚拟机)
我们都知道在编译Java文件时,输出不是'exe',而是'.class'文件。 '.class'文件由JVM可理解的Java字节代码组成。 Java虚拟机根据底层操作系统和硬件组合将字节代码解释为机器代码。它负责垃圾收集,数组边界检查等所有事情...... JVM依赖于平台。
JVM被称为“虚拟”,因为它提供的机器接口不依赖于底层操作系统和机器硬件架构。这种与硬件和操作系统的独立性是Java程序的一次写入运行任务值的基石。
有不同的JVM实现。这些可能在性能,可靠性,速度等方面有所不同。这些实现将在Java规范未提及如何实现这些功能的区域中有所不同,例如垃圾收集过程如何工作是依赖于JVM的,Java规范没有定义任何具体的方法来做到这一点。
答案 3 :(得分:23)
Java虚拟机(JVM)是可以执行Java ByteCode的虚拟机。它是Java软件平台的代码执行组件。
Java Development Kit(JDK)是针对Java开发人员的Oracle Corporation产品。自Java引入以来,它一直是使用最广泛的Java软件开发工具包(SDK)。
Java Runtime Environment ,也称为Java Runtime,Runtime Environment
OpenJDK(Open Java Development Kit)是Java编程语言的免费开源实现。这是Sun Microsystems于2006年开始的努力的结果。该实现是根据GNU通用公共许可证(GPL)许可的,具有链接异常。
答案 4 :(得分:15)
JDK (Java Development Kit):
JRE (Java运行时环境)
Java Runtime Environment包含JVM,类库和其他支持文件。 JRE的目标是执行Java文件。
JVM (Java虚拟机)
JVM 将字节代码解释为机器代码,具体取决于底层操作系统和硬件组合。它负责垃圾收集,数组边界检查等所有事情...... Java虚拟机提供了一种独立于平台的执行代码的方式。
答案 5 :(得分:13)
JVM 是在
上执行的虚拟机Java代码JRE 是运行Java应用程序所需的环境(标准库和JVM)
JDK 是包含开发人员工具和文档的JRE
OpenJDK 是JDK的开源版本,与Oracle拥有的常见JDK不同
答案 6 :(得分:6)
JDK - 将java编译为ByteCode。由调试器,编译器等组成。
javac file.java // Is executed using JDK
JVM - 执行字节代码。 JVM是使java平台独立的一个。但JVM因平台而异。
JRE - JVM以及用于执行java程序的java运行时库。
答案 7 :(得分:4)
值得一提的另一个方面是:
JDK(java开发工具包)
您需要将它用于开发目的,如名称所示。
例如:一家软件公司将在他们的计算机上安装JDK,因为他们需要开发新的软件,包括编译和运行他们的Java程序。
所以我们可以说JDK = JRE + JVM。
JRE(java运行时环境)
需要运行Java程序。你不能用它编译Java程序。
例如:想要运行某些在线游戏的普通计算机用户需要在他的系统中使用JRE来运行Java程序。
JVM(java虚拟机)
您可能知道它运行字节码。它使Java平台独立,因为它执行编译Java程序后得到的.class
文件,无论您是在Windows,Mac还是Linux上编译它。
打开JDK
好吧,就像我上面说的那样。现在JDK是由不同的公司制作的,其中一个恰好是开源的,免费供公众使用的是OpenJDK,而另一些则是Oracle Corporation的JRockit JDK或IBM JDK。
然而,它们对于普通用户来说可能看起来都一样。
结论
如果您是Java程序员,您的系统中将需要JDK,此软件包也将包含JRE和JVM,但如果您是喜欢玩在线游戏的普通用户,那么您只需要JRE而且此软件包不会有JDK就在其中。
换句话说,JDK是祖父,JRE是父亲,JVM是他们的儿子。
答案 8 :(得分:3)
Java是一种语言,包含严格且强类型的语法,您现在应该非常熟悉它。
Java 2平台,标准版,也称为J2SE,引用该平台并包括java.lang和java.io包中的类等。它是构建Java应用程序的构建块。
Java虚拟机(JVM)是运行已编译Java代码的软件虚拟机。因为编译的Java代码只是字节码,所以JVM负责在运行之前将该字节码编译为机器代码。 (这通常称为即时编译器或JIT编译器。)JVM还负责内存管理,以便应用程序代码不必。
Java Development Kit(JDK)一直是Java开发人员用来创建Java应用程序的软件。它包含一个Java语言编译器,一个文档生成器,用于处理本机代码的工具,以及(通常)用于启用调试平台类的平台的Java源代码。
Java Runtime Environment或JRE一直是最终用户下载的软件,用于运行已编译的Java应用程序。它包含一个JVM,但不包含JDK中捆绑的任何开发工具。但是,JDK确实包含JRE。
答案 9 :(得分:3)
JVM:描述运行java程序的方式/资源的规范。实际上执行字节代码并使java平台独立。这样做,对于不同的平台是不同的。 Windows的JVM无法用作UNIX的JVM。
JRE: JVM的实现。 (JVM +运行时库)
JDK: JRE + java编译器以及从头开始构建java程序的其他必备工具
答案 10 :(得分:2)
JVM :这实际上意味着字节码解释器。它与平台有关。例如:在Windows平台中,' java.exe '或' javaw.exe '进程是jvm进程。
JDK :是一个工具包,包含开发和执行java程序/应用程序所需的库和实用程序
JRE :是java application.ie的执行环境,它只支持运行时依赖项,包括编译程序的jvm。如果我们想编译一个java程序,我们需要jdk。
答案 11 :(得分:2)
<强> JVM 强>
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
答案 12 :(得分:2)
JVM:java的虚拟机。告诉机器如何处理Java代码。您不能按原样下载JVM。它包装在其他组件中。
JRE:上面提到的其他一些组件是JRE。 它是JVM +其他jar来创建运行时环境
JDK:包含JRE(后者又包含JVM)。获得JDK后,无需单独安装JRE和JVM。它包含将.java文件编译为.class文件的编译器
答案 13 :(得分:1)
总结:
如果要使用Java开发,则需要JDK,但是如果只想运行Java,则需要JRE。
答案 14 :(得分:1)
JVM 缩写为 Java虚拟机,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。
答案 15 :(得分:0)
JDK :您需要编写并运行Java代码的完整包
OpenJDK :JDK的独立实现,使其更好
JVM :将Java代码转换为字节码,并提供说明如何编译,加载,验证,检查错误并执行Java代码的规范。
JRE :使用某些Java库运行程序的JVM的实现
答案 16 :(得分:0)
JRE 执行应用程序,但JVM逐行读取指令,因此它是解释器。
JDK = JRE +开发工具
JRE = JVM +库类
答案 17 :(得分:0)
用外行术语来说: - JDK = JRE +开发/调试工具,其中JDK是我们使用Java的完整包,从创建编译到运行它。另一方面,JRE只是运行代码(字节代码)。
注意: - 无论我们是安装JDK还是JRE,JVM都会与这两个软件包捆绑在一起,而JVM是JIT编译器将字节代码转换为机器特定代码的部分。
上的文章答案 18 :(得分:0)
JVM Java虚拟机,实际上是执行java字节码。 它是JAVA平台上的执行块。它将字节码转换为机器码。
JRE Java Runtime Environment,提供了执行Java应用程序的最低要求;它由Java虚拟机(JVM),核心类和支持文件组成。
JDK Java Development Kit,它拥有开发应用程序软件的所有工具。它是JRE + JVM
Open JDK 是Java平台的免费开源实现。