JVM,JDK,JRE和OpenJDK有什么区别?

Ali*_*eza 322 java jvm difference

JVM,JDK,JREOpenJDK有什么区别?

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

ala*_*inm 364

JVM

Java虚拟机(JVM)是运行Java字节代码的虚拟机.JVM不了解Java源代码; 这就是为什么要编译*.java文件以获取*.class包含JVM理解的字节码的文件的原因.它也是允许Java成为"可移植语言"的实体(只需编写一次,随处运行).实际上,JVM有针对不同系统的特定实现(Windows,Linux,macOS,请参阅Wikipedia列表),目的是使用相同的字节码,它们都会给出相同的结果.

JDK和JRE

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

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的

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

这篇博客中说明了不同之处:

问:OpenJDK存储库中的源代码与用于构建Oracle JDK的代码之间有什么区别?

答:非常接近 - 我们的Oracle JDK版本构建过程基于OpenJDK 7构建,只添加了几个部分,例如部署代码,其中包括Oracle的Java插件和Java WebStart的实现,以及一些封闭的源代码派对组件,如图形光栅化器,一些开源的第三方组件,如Rhino,以及一些零碎的东西,如附加文档或第三方字体.展望未来,我们的目的是开源Oracle JDK的所有部分,除了我们考虑商业功能的部分,例如JRockit Mission Control(Oracle JDK中尚未提供),并用开源替代品替换受阻的第三方组件以实现更接近的平价代码库之间.

  • @MadsSkjern是的,你需要一个JRE来运行Java应用程序.但是当您下载Java应用程序时,它没有附带JRE,它希望您的计算机上安装了一个. (8认同)
  • @alain.janinm,那么您会选择 OracleJDK 还是 OpenJDK 进行开发? (2认同)

hvg*_*des 87

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

JRE是Java运行时环境 - 它包含一个JVM,以及运行Java程序所需的内容.

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

OpenJDK是一个特定的JDK实现.

  • 可能是因为你没有提到JVM中包含的"其他东西".这些是什么 ?本文是否完全回答了这个问题 - http://www.javabeat.net/what-is-the-difference-between-jrejvm-and-jdk/ (2认同)

use*_*226 46

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规范没有定义任何具体的方法来做到这一点.


nid*_*hin 23

Java虚拟机(JVM)是能够执行Java字节码的虚拟机.它是Java软件平台的代码执行组件.

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

Java Runtime Environment,也称为Java Runtime,Runtime Environment

OpenJDK(Open Java Development Kit)是Java编程语言的免费开源实现.这是Sun Microsystems于2006年开始的努力的结果.该实现是根据GNU通用公共许可证(GPL)许可的,具有链接异常.


小智 15

只是:

JDK(Java开发工具包):

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

JRE(Java运行时环境)

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

JVM(Java虚拟机)

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


Gar*_*all 14

JVM是Java代码执行的虚拟机

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

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

OpenJDK是JDK的开源版本,与Oracle拥有的常见JDK不同


bha*_*ran 6

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

javac file.java // Is executed using JDK
Run Code Online (Sandbox Code Playgroud)

JVM - 执行字节代码.JVM是使java平台独立的一个.但JVM因平台而异.

JRE - JVM以及用于执行java程序的java运行时库.


Kor*_*gay 5

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

\n

Java 2 平台标准版,也称为 J2SE,指的是该平台,并包括 java.lang 和 java.io 包等中的类。它是构建 Java 应用程序的构建块。

\n

Java 虚拟机 (JVM) 是运行编译后的 Java 代码的软件虚拟机。由于编译后的 Java 代码只是字节码,因此 JVM 负责在运行之前将该字节码编译为机器代码。(这通常称为即时编译器或 JIT 编译器。)JVM 还负责内存管理,因此应用程序代码不需要\xe2\x80\x99。

\n

Java 开发工具包(JDK)过去是、现在仍然是 Java 开发人员用来创建 Java 应用程序的软件。它包含 Java 语言编译器、文档生成器、使用本机代码的工具以及(通常)平台的 Java 源代码以启用调试平台类。

\n

Java 运行时环境(JRE)过去是、现在仍然是最终用户下载以运行已编译的 Java 应用程序的软件。它包含 JVM,但不包含 JDK 中捆绑的任何开发工具。然而,JDK 确实包含 JRE。

\n


Ler*_*ang 5

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

在此输入图像描述

这是他们的关系:

在此输入图像描述

参考:
Java JDK、JRE 和 JVM