JDK和JRE有什么区别?

编者按:这个问题是在2009年提出的,当时的世界不同。2022年,标准的开源OpenJDK仅限JDK。


JDK和JRE有什么区别?

他们的角色是什么,我应该什么时候使用一个或另一个?

794710 次浏览

JRE就是Java运行环境。它包含了运行已编译Java程序所需的一切,包括Java虚拟机(JVM)、Java类库、java命令和其他基础设施。但是,它不能用于创建新程序。

JDKJava开发套件,用于Java的全功能SDK。它包含JRE所拥有的一切,但也包含编译器(javac)和工具(如javadocjdb)。它能够创建和编译程序。

通常,如果你只关心在计算机上运行Java程序,你只会安装JRE。这就是你所需要的。另一方面,如果你打算做一些Java编程,你需要安装JDK。

有时,即使您不打算在计算机上进行任何Java开发,您仍然需要安装JDK。例如,如果您使用JSP部署Web应用程序,从技术上讲,您只是在应用服务器内运行Java程序。那么为什么需要JDK呢?因为应用服务器将JSP转换为Javaservlet,需要使用JDK来编译servlet。我相信还有更多示例。

上面的答案(巴勃罗)是非常正确的。这只是额外的信息。

顾名思义,JRE环境。它基本上是一堆包含Java相关文件的目录,即:

  • bin/包含Java的可执行程序。最重要的是java(对于Windows也是javaw),它启动JVM。这里还有一些其他实用程序,例如keytoolpolicytool
  • conf/保存用户可编辑的配置文件,供Java专家使用。
  • lib/有大量的支持文件:一些.jar,配置文件,属性文件,字体,翻译,证书等-所有Java的“装饰”。最重要的是modules,一个包含Java标准库.class文件的文件。
  • 在某种程度上,Java标准库需要调用本机代码。为此,JRE在bin/lib/下包含一些.dll(Windows)或.dylib(macOS)或.so(Linux)文件,并支持特定于系统的本机二进制代码。

JDK也是一组目录。它是JRE的超集,有一些补充:

  • bin/已经用开发工具进行了扩展。其中最重要的是javac;其他包括jarjavadocjshell
  • 添加了jmods/,它保存标准库的JMOD文件。这些文件允许标准库与jlink一起使用。

从官方java网站…

JRE(Java运行时环境):

  • 它是Java虚拟机*的实现,实际执行Java程序。
  • Java运行时环境是运行java程序所需的插件。
  • JRE比JDK小,因此它需要更少的磁盘空间。
  • JRE可以从以下站点免费下载/支持https://www.java.com
  • 它包括JVM、Core库和其他附加组件,用于运行用Java编写的应用程序和小程序。

JDK(Java开发套件)

  • 它是一个软件包,您可以使用它来开发基于Java的应用程序。
  • 开发Java应用程序需要Java开发工具包。
  • JDK需要更多的磁盘空间,因为它包含JRE以及各种开发工具。
  • JDK可以从以下站点免费下载/支持https://www.oracle.com/technetwork/java/javase/downloads/
  • 它包括JRE,一组API类,Java编译器,Webstart以及编写Java小程序和应用程序所需的其他文件。

从调试的角度来看有一个区别:

要调试到Java系统类,例如String和ArrayList,您需要一个特殊版本的JRE,它使用“调试信息”进行编译。JDK中包含的JRE提供了此信息,但常规JRE没有。常规JRE不包含此信息以确保更好的性能。

什么是调试信息?以下是来自这篇博客文章的快速解释:

现代编译器可以很好地转换高级代码,它有很好的缩进和嵌套的控制结构,可以将任意类型的变量转换成一大堆称为机器代码(Java情况下是字节码)的位,唯一的目的是在目标CPU(JVM的虚拟CPU)上尽可能快地运行。Java代码被转换成多个机器代码指令。变量被推到各个地方——进入堆栈,寄存器,或者完全优化掉。生成的代码中甚至不存在结构和对象,它们只是一个抽象将其转换为硬编码偏移到内存缓冲区中。

那么,当您要求调试器在某个函数的入口中断时,调试器如何知道在哪里停止?当您要求它提供变量的值时,它如何找到要向您显示的内容?答案是-调试信息。

调试信息由编译器和机器代码一起生成。它是可执行程序和原始源代码之间关系的表示。这些信息被编码成预定义的格式,并与机器代码一起存储。多年来,针对不同的平台和可执行文件发明了许多这样的格式。

输入图片描述

JDK是JRE的超集,包含JRE中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具。JRE提供了库、Java虚拟机(JVM)和其他组件来运行用Java编程语言编写的小程序和应用程序。

JRE

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

JDK

JDK是Java开发工具包的缩写。它实际存在。它包含JRE+开发工具。

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

通常,当您只关心在浏览器或计算机上运行Java程序时,您将只安装JRE。这就是您所需要的全部。另一方面,如果您计划进行一些Java编程,您还需要JDK。

这是一个直接来自Oracle的简单响应http://docs.oracle.com/javase/7/docs/technotes/guides/

JavaSE运行时环境(JRE)

JRE提供了运行用Java编程语言编写的小程序和应用程序所需的库、Java虚拟机和其他组件。这个运行时环境可以与应用程序一起重新分发,使它们成为独立的。

JavaSE开发套件(JDK)

JDK包括JRE以及命令行开发工具,例如编译器和调试器,这些工具对于开发小程序和应用程序是必要或有用的。

JVM(Java虚拟机)是一种抽象机器,它是提供Java字节码运行环境的规范。

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

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

如果要运行Java程序,但不开发它们,请下载Java运行时环境或JRE。如果要开发它们,请下载Java开发工具包或JDK

JDK

让我们称之为JDK是一个工具包,其中包括开发和运行Java应用程序所需的东西。

JDK作为构建应用程序、组件和小程序的开发环境。

JRE

它包含以编译形式运行Java应用程序所需的一切。您不需要任何库和其他东西。您需要的所有东西都已编译。

JRE不能用于开发,只能用于运行应用程序。

通俗地说:JDK是祖父JRE是父亲,JVM是他们的儿子。[即JDK>JRE>JVM]

JDK=JRE+开发/调试工具

JRE=JVM+Java软件包类(如util,数学,lang,awt等)+运行时库。

JVM=类加载器系统+运行时数据区域+执行引擎。

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

JVM:

Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM不理解Java源代码,这就是为什么编译*. java文件以获取包含JVM可以理解的字节码的*. class文件。它也是允许Java成为“可移植语言”(编写一次,在任何地方运行)的实体。事实上,JVM有针对不同系统的特定实现(Windows、Linux、MacOS,参见维基百科列表…),目的是使用相同的字节码它们都给出相同的结果。

JDK和JRE

要解释JDK和JRE之间的区别,最好是阅读Oracle留档并查阅图表:

Java运行时环境(JRE)

0#提供了库、Java虚拟机和其他组件来运行以Java编程语言编写的小程序和应用程序。此外,JRE还包括两项关键部署技术:Java插件,它使小程序能够在流行的浏览器中运行;JavaWeb Start,它通过网络部署独立的应用程序。它也是用于企业软件开发和部署的Java2平台企业版(J2EE)中技术的基础。JRE不包含用于开发小程序和应用程序的工具和实用程序,如编译器或调试器。

Java开发套件(JDK)

JDK是JRE的超集,包含JRE中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具。

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

JIT编译过程(礼貌:Oracle留档)

JDK>JRE>JVM

在此处输入图片描述

jdk是编译为代码并将java代码转换为字节码所必需的,而jre是执行字节码所必需的。

JDK和JRE的区别在于JDK是Java的第三方开发工具,而JRE是运行程序的地方。

假设,如果您是开发人员,那么您的角色是开发程序和执行程序。因此,您必须拥有由JDK提供的开发和执行环境。

假设,如果你是一名客户端,那么你不必担心开发。你只需要一个JRE提供的仅运行程序并获取结果的环境。

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

JDK=JRE+开发工具

JRE=JVM+库类

清楚地了解这些术语(JVM、JDK、JRE)对于掌握它们的用法和差异至关重要。

JVMJava虚拟机(JVM)是一个执行Java字节码的运行时系统。JVM就像一台虚拟计算机,可以执行一组编译的指令并操作内存位置。当Java编译器编译源代码时,它会在. class文件中生成一组高度优化的指令集,称为字节码。JVM解释这些字节码指令并将它们转换为机器特定的代码来执行。

JDKJava开发工具包(JDK)是一种软件开发环境,您可以使用它来开发和执行Java应用程序。它包括JRE和一组编程工具,例如Java编译器、解释器、应用程序查看器和文档查看器。JDK通过JavaSE、JavaEE或JavaME平台实现。

JREJava运行时环境(JRE)是JDK的一部分,包括JVM、核心类和几个支持应用程序开发的库。虽然JRE是JDK的一部分,但您也可以单独下载和使用它。

对于完整的理解,你可以看到我的博客:Jdk Jre Jvm和差异

如果您是Java程序员,您将需要系统中的JDK,并且此软件包还将包括JRE和JVM,但如果您是普通用户喜欢玩在线游戏,那么您只需要JRE,并且此软件包中没有JDK。

JVM

JVM(Java虚拟机)是一个抽象的机器提供运行时环境的规范,其中java字节码可以执行。

JVM可用于许多硬件和软件平台。JVM、JRE和JDK依赖于平台,因为每个操作系统的配置不同的。但是,Java是平台独立的。

JRE

它包含了运行编译Java应用程序所需的一切形式。你不需要任何图书馆和其他东西。所有你需要的东西需要编译。

JRE不能用于开发,只能用于运行应用程序。

JavaSE开发套件(JDK)

JDK包括JRE以及命令行开发工具,例如开发所必需或有用的编译器和调试器小程序和应用程序。

(来源:GeeksForGeeks Q&AJava平台概览)

JVM、JRE、JDK——这些都是Java语言的骨干。每个组件单独工作。JDK和JRE物理上存在,但JVM是一台抽象机器,这意味着它不存在。

JVM是JDK和JRE的子系统,用于检查被称为“字节码”的中间代码。它首先通过JVM子系统类加载器加载由Java编译器(javac)生成的“类文件”(扩展名为. c)并根据它们的使用分类内存位置(类区域、堆栈、堆和pc寄存器)。然后检查所有字节码以确保它是在Java返回以及网络对所有内存的可访问性。解释器的工作之后开始,它逐行检查整个程序。结果最终通过运行时设施的JRE(Java运行时环境)显示在控制台/浏览器/应用程序中。

JRE也是JDK的一个子系统,它提供JVM、类、. jar文件等可执行文件等运行时设施。

JDK代表Java开发工具包。它包含Java编程中使用的所有必要组件,例如类、方法、摇摆、AWT、软件包、Java(解释器)、javac(编译器)、Applet查看器(小程序应用程序查看器)等。总而言之,它包含开发应用程序所需的每个文件,无论是独立的还是基于Web的。

JDK包括JRE plus命令行开发工具,例如编译器和调试器,这些工具对于开发小程序和应用程序是必要或有用的。

JRE基本上是运行Java程序的Java虚拟机。它还包括用于Applet执行的浏览器插件。

JDK是一个抽象机器。它是提供可以执行java字节码的运行时环境的规范。

所以,基本上JVM

简单地说:

JVM是虚拟机Java代码执行

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

JDK是带有开发工具和留档的JRE

JVM、JRE和JDK依赖于平台,因为每个操作系统的配置不同。但是,Java是独立于平台的。

Java虚拟机(JVM)是执行Java字节码的运行时系统。

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

JDK包括JRE以及命令行开发工具,例如编译器和调试器,这些工具对于开发小程序和应用程序是必要或有用的。

JRE

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

除了Sun Micro Systems之外,其他公司也在积极发布JVM的实现。

在此处输入图片描述

JDK

JDK是Java开发工具包的缩写。它实际存在。它包含JRE+开发工具。

在此处输入图片描述