JVM, JDK, JRE和OpenJDK之间的区别是什么?

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


JVM是Java虚拟机-它实际上运行Java字节码。

JRE是Java运行时环境——其中包含JVM,并且是运行Java程序所需要的。

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

OpenJDK是一个特定的JDK实现。

JVM是执行Java代码的虚拟机

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

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

OpenJDK是一个开源版本的JDK,不像Oracle拥有的普通JDK

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

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

Java运行时环境,也被称为Java运行时、运行时环境

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

JVM

The Java Virtual Machine (JVM) is the virtual machine that runs the Java bytecodes. The JVM doesn't understand Java source code; that's why you need compile your *.java files to obtain *.class files that contain the bytecodes understood by the JVM. It's also the entity that allows Java to be a "portable language" (write once, run anywhere). Indeed, there are specific implementations of the JVM for different systems (Windows, Linux, macOS, see the Wikipedia list), the aim is that with the same bytecodes they all give the same results.

JDK和JRE

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

Java Runtime Environment (JRE) The Java Runtime Environment (JRE) provides the libraries, the Java Virtual Machine, and other components to run applets and applications written in the Java programming language. In addition, two key deployment technologies are part of the JRE: Java Plug-in, which enables applets to run in popular browsers; and Java Web Start, which deploys standalone applications over a network. It is also the foundation for the technologies in the Java 2 Platform, Enterprise Edition (J2EE) for enterprise software development and deployment. The JRE does not contain tools and utilities such as compilers or debuggers for developing applets and applications. Java Development Kit (JDK) The JDK is a superset of the JRE, and contains everything that is in the JRE, plus tools such as the compilers and debuggers necessary for developing applets and applications.

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

OpenJDK

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

区别在这个博客中说明:

Q: What is the difference between the source code found in the OpenJDK repository, and the code you use to build the Oracle JDK? A: It is very close - our build process for Oracle JDK releases builds on OpenJDK 7 by adding just a couple of pieces, like the deployment code, which includes Oracle's implementation of the Java Plugin and Java WebStart, as well as some closed source third party components like a graphics rasterizer, some open source third party components, like Rhino, and a few bits and pieces here and there, like additional documentation or third party fonts. Moving forward, our intent is to open source all pieces of the Oracle JDK except those that we consider commercial features such as JRockit Mission Control (not yet available in Oracle JDK), and replace encumbered third party components with open source alternatives to achieve closer parity between the code bases.

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已被Oracle在Java SE 9中弃用,并在Java SE 11中删除。

另一个值得一提的方面是:

JDK (java开发工具包)

正如名称所示,您将需要它用于开发目的。

例如:一家软件公司会在他们的计算机中安装JDK,因为他们需要开发新的软件,其中包括编译和运行他们的Java程序。

因此我们可以说JDK = JRE + JVM。

JRE (java运行时环境)

运行Java程序需要它。你不能用它来编译Java程序。

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

java虚拟机

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

开放的JDK

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

然而,对于普通用户来说,它们可能都是一样的。

结论

如果你是一个Java程序员,你的系统中需要JDK,这个包将包括JRE和JVM,但如果你是一个喜欢玩在线游戏的普通用户,那么你只需要JRE,这个包中没有JDK。

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

JDK (Java Development Kit)

Java开发工具包包含开发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 Runtime Environment)

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

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

JVM (Java虚拟机)

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

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

有不同的JVM实现。它们可能在性能、可靠性、速度等方面有所不同。这些实现的不同之处在于Java规范没有提到如何实现这些功能,比如垃圾收集过程的工作方式是依赖于JVM的,Java规范没有定义任何具体的方法来做到这一点。

JDK (Java Development Kit):

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

JRE (Java Runtime Environment)

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

JVM (Java虚拟机)

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

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

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

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

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

Java 2平台标准版,也称为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。

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

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

JDK Java开发工具包,它拥有开发应用程序软件的所有工具。它是JRE+JVM

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

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

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

只需阅读关于JDK、JRE、JVM和JIT的文章即可

JVM

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

JRE

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

JDK

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

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

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

javac file.java // Is executed using JDK

JVM——执行字节代码。JVM使java平台独立。但是JVM因平台而异。

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

JVM:描述运行java程序的方式/资源的规范。实际执行字节代码,使java平台独立。在这个过程中,不同的平台是不同的。windows的JVM不能像UNIX的JVM那样工作。

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

JDK: JRE + java编译器等基本工具,从零开始构建java程序

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

OpenJDK:一个独立的JDK实现,使它变得更好

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

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

JVM: java的虚拟机。告诉机器用Java代码做什么。不能按原样下载JVM。它被打包在其他组件中。

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

JDK:包含JRE(JRE又包含JVM)。获得JDK后,不需要分别安装JRE和JVM。它包含编译器,编译你的.java文件到.class文件

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

JDK = JRE +开发工具

JRE = JVM +库类

JVM is abbreviated as Java Virtual Machine, JVM is the main component of java architecture. JVM is written in C programming language. Java compiler produce the byte code for JVM. JVM reading the byte code verifying the byte code and linking the code with the ibrary. JRE is abbreviated as Java Runtime Environment. it is provide environment at runtime. It is physically exist. It contain JVM + set of libraries(jar) +other files. JDK is abbreviated as Java Development Kit . it is develop java applications. And also Debugging and monitoring java applications . JDK contain JRE +development tools(javac,java)

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

总而言之:

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

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

开发人员使用JDK进行开发,首先我们编写.java源代码 开发人员调试代码并将代码编译成JRE中的.class字节码可执行文件 可执行文件由JVM执行,将字节码转换为机器可以执行的本机机器码

他们的关系如下:

参考: Java JDK、JRE和JVM

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

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

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

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

简单的图片来说明JDK、JRE、JDK。

JDK一般来说,它只会安装在开发环境中,比如在开发人员中,在公司的实时QA系统中。在服务器上运行的原始代码将没有JDK。

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

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

.class文件不是本地代码(cpu能理解的代码)。如果.java文件直接转换为本机代码,则无法实现WORA(一次编写,随处运行)的概念。

本机代码因操作系统而异。所以,Java创建了一个叫做。class的中间文件和一个叫做“JVM”的神奇程序。将.class转换为本机代码是JVM的职责。