JVM, JDK, JRE和OpenJDK之间的区别是什么?
我在用Java编程时遇到了这些短语,它们之间有什么区别?
JVM, JDK, JRE和OpenJDK之间的区别是什么?
我在用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字节码。
JRE是Java运行时环境——其中包含JVM,并且是运行Java程序所需要的。
JDK是Java开发工具包——它是JRE,但添加了javac(这是编译Java源代码所需的工具)和其他编程工具。
OpenJDK是一个特定的JDK实现。
总而言之:
JRE = JVM + Java包(如util, math, lang, awt, swing等)+ 运行时库 JDK = JRE +开发/调试工具
如果你想用java开发,你需要JDK,但如果你只想运行java,你需要JRE。
简单的图片来说明JDK、JRE、JDK。
JDK一般来说,它只会安装在开发环境中,比如在开发人员中,在公司的实时QA系统中。在服务器上运行的原始代码将没有JDK。
JRE是JDK的一部分,也可以独立安装在服务器上。在处理用户请求的实时服务器中,只安装JRE和开发人员开发的代码(*.class格式)
JVM Developer开发的代码>在开发机器上测试和执行。执行阶段需要Java的媒介。
.class文件不是本地代码(cpu能理解的代码)。如果.java文件直接转换为本机代码,则无法实现WORA(一次编写,随处运行)的概念。
本机代码因操作系统而异。所以,Java创建了一个叫做。class的中间文件和一个叫做“JVM”的神奇程序。将.class转换为本机代码是JVM的职责。
JDK——像javac这样的工具用于将*.java文件编译为*.class字节码文件(主要用于开发Java程序)
JRE -运行*.jar文件的工具(基本上运行Java程序)
JVM -将*.class文件编译为可执行机器代码的工具(运行所有Java字节码)
OpenJDK只是Java JDK的一个发行版。
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