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

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


当前回答

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

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

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

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

其他回答

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

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

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

总而言之:

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

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

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

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

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

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

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中删除。

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

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

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