JVM,JDK,JRE和OpenJDK有什么区别?
我是用Java编程的,我遇到了这些短语,它们之间有什么区别?
Java虚拟机(JVM)是运行Java字节码的虚拟机。 JVM不了解Java源代码;这就是为什么你需要编译你的*.java
文件来获取包含JVM理解的字节码的*.class
文件。它也是允许Java成为“可移植语言”的实体(只需编写一次,随处运行)。实际上,JVM的特定实现适用于不同的系统(Windows,Linux,macOS,see the Wikipedia list),目的是使用相同的字节码,它们都会产生相同的结果。
要解释JDK和JRE之间的区别,最好是阅读Oracle documentation并参考图表:
Java运行时环境(JRE)
Java运行时环境(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
JVM:描述运行java程序的方式/资源的规范。实际上执行字节代码并使java平台独立。这样做,对于不同的平台是不同的。 Windows的JVM无法用作UNIX的JVM。
JRE:JVM的实现。 (JVM +运行时库)
JDK:JRE + java编译器以及从头开始构建java程序的其他必备工具
JVM:这实际上意味着字节码解释器。它与平台有关。例如:在Windows平台中,'java.exe'或'javaw.exe'进程是jvm进程。
JDK:是一个工具包,包含开发和执行java程序/应用程序所需的库和实用程序
JRE:是java application.ie的执行环境,它只支持运行时依赖,包括编译程序的jvm。如果我们想编译一个java程序,我们需要jdk。
JVM:java的虚拟机。告诉机器如何处理Java代码。您不能按原样下载JVM。它包装在一些其他组件中。
JRE:上面提到的其他一些组件是JRE。它是JVM +其他jar创建运行时环境
JDK:包含JRE(后者又包含JVM)。获得JDK后,无需单独安装JRE和JVM。它包含将.java文件编译为.class文件的编译器
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
JVM Java虚拟机实际上执行java字节码。它是JAVA平台上的执行块。它将字节码转换为机器码。
JRE Java Runtime Environment,提供执行Java应用程序的最低要求;它由Java虚拟机(JVM),核心类和支持文件组成。
JDK Java Development Kit,它拥有开发应用程序软件的所有工具。它就像JRE + JVM一样
Open JDK是Java平台的免费开源实现。
通俗地说: - JDK = JRE +开发/调试工具,其中JDK是我们使用Java的完整包,从创建编译到运行它。另一方面,JRE只是运行代码(字节代码)。
注意: - 无论我们是安装JDK还是JRE,JVM都会与这两个软件包捆绑在一起,而JVM是JIT编译器将字节代码转换为机器特定代码的部分。
请阅读有关JDK,JRE ,JVM and JIT的文章
JDK:编写和运行java代码所需的完整包
OpenJDK:JDK的独立实现,使其更好
JVM:将Java代码转换为字节码,并提供说明如何编译,加载,验证,检查错误和执行Java代码的规范。
JRE:JVM的实现,使用一些Java库来运行程序
JRE执行应用程序,但JVM逐行读取指令,因此它是解释器。
JDK = JRE +开发工具
JRE = JVM +库类
JVM简称为Java虚拟机,JVM是java体系结构的主要组件。 JVM是用C编程语言编写的。 Java编译器为JVM生成字节代码。 JVM读取字节码验证字节码并将代码与ibrary链接。 JRE缩写为Java Runtime Environment。它在运行时提供环境。它实际存在。它包含JVM +库集(jar)+其他文件。 JDK缩写为Java Development Kit。它是开发java应用程序。还有调试和监控java应用程序。 JDK包含JRE +开发工具(javac,java)
OpenJDK OpenJDK是sun JDK的开源版本。 Oracle JDK是Sun的官方JDK。
JVM是Java虚拟机 - 它实际上运行Java ByteCode。
JRE是Java运行时环境 - 它包含一个JVM,以及运行Java程序所需的内容。
JDK是Java开发工具包 - 它是JRE,但是使用javac(这是编译Java源代码所需的)和其他编程工具的添加。
OpenJDK是一个特定的JDK实现。
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规范没有定义任何具体的方法来做到这一点。
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)许可的,具有链接异常。
JDK(Java开发工具包):
JRE(Java运行时环境)
Java运行时环境包含JVM,类库和其他支持文件。 JRE的目标是执行Java文件。
JVM(Java虚拟机)
JVM根据底层操作系统和硬件组合将字节代码解释为机器代码。它负责垃圾收集,数组边界检查等所有事情...... Java虚拟机提供了一种独立于平台的执行代码的方式。
JVM是Java代码执行的虚拟机
JRE是运行Java应用程序所需的环境(标准库和JVM)
JDK是包含开发人员工具和文档的JRE
OpenJDK是JDK的开源版本,与Oracle拥有的常见JDK不同
JDK - 将java编译为ByteCode。由调试器,编译器等组成。
javac file.java // Is executed using JDK
JVM - 执行字节代码。 JVM是使java平台独立的一个。但JVM因平台而异。
JRE - JVM以及用于执行java程序的java运行时库。
另一方面值得一提:
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是他们的儿子。
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。