ChatGPT解决这个技术问题 Extra ChatGPT

JDK和JRE有什么区别?

JDK和JRE有什么区别?

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

可以在以下位置找到此问题的简洁明了的答案:java.com/en/download/faq/techinfo.xml
@kenorb 基于时间戳,链接的问题似乎是这个问题的副本。

v
vcovo

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

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

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

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


然后,当我们使用外部 jars 时,我们将这些 jars 部署在 jre/lib/ext/.. 那么为什么呢?
有一些 jars 专门用作 Java 的扩展;这些可以而且应该放在 lib/ext 中。但是放置任何旧的应用程序 jar 并不是这个目录的用途;这是对扩展机制的滥用,可能会在以后引起问题。
我已经在 JExcel API 上工作过,并且我已经正确设置了类路径,但仍然存在问题。所以我将它部署在 tlib/ext 文件夹中,之后就可以了??那会是什么原因??
我没有完全确定的信息,但我的猜测是您没有真正正确设置类路径,或者您为与最终使用您的代码的类加载器不同的类加载器设置了类路径。 lib/ext 与类路径扩展的不同之处在于,lib/ext 将影响任何使用该特定 JRE 的 Java 应用程序——它比设置类路径更简单。
几周前,我经历了一个相当大的故障,通过更改我的 JAVA_HOME 和 Path 环境变量以引用 JRE 而不是 JDK 得到了纠正。在什么情况下,应用程序会使用 JRE 运行并使用 JDK 失败?我想我应该提出一个新问题。有趣的是,从 1.6 版开始,JRE 包含在 JDK 安装中,但在与 JDK 文件夹相同的级别解压缩,而在 1.5 版及之前的版本中,JRE 文件夹位于 JDK 中。顺便说一句:好答案!
M
MultiplyByZer0

上面的答案(Pablo)是非常正确的。这只是附加信息。

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

bin/ 包含 Java 的可执行程序。最重要的是 java(对于 Windows,javaw 也是如此),它启动 JVM。这里还有一些其他实用程序,例如 keytool 和 policytool。

conf/ 保存用户可编辑的配置文件,供 Java 专家使用。

lib/ 有大量的支持文件:一些 .jars、配置文件、属性文件、字体、翻译、证书等——所有 Java 的“修剪”。最重要的是模块,一个包含 Java 标准库的 .class 文件的文件。

在一定程度上,Java 标准库需要调用本机代码。为此,JRE 在 bin/ 或 lib/ 下包含一些 .dll (Windows) 或 .dylib (macOS) 或 .so (Linux) 文件,以及支持系统特定的本机二进制代码。

JDK 也是一组目录。它是 JRE 的超集,并添加了一些内容:

bin/ 已通过开发工具进行了扩展。其中最重要的是javac;其他包括 jar、javadoc 和 jshell。

已添加保存标准库的 JMOD 文件的 jmods/。这些文件允许标准库与 jlink 一起使用。


这是否意味着我可以将路径变量设置为 JDK,仅此而已?
@Brady:是的,我想是的。这对我来说很好,至少。作为开发人员,我基本上忽略了 JRE。如果存在您特别需要 JRE 的特殊情况,我不知道。
JRE 只能使用已编译的 Java 代码,对吗?
@Cupidvogel,因为JRE中没有编译器,我想你可以这么说。 JRE 用于运行(编译)Java 代码,而 JDK 还为您提供开发它的工具。
所以基本上 JDK 包括一个编译器(如 Javac)来编译代码,一个 JRE(运行时系统)来执行编译后的代码,以及其他旨在让程序员的开发生活变得轻松的工具,对吗?所以 AFAIU,这里只有 Javac 和 JRE 才是真正必要的工具。那么,为什么很多时候,软件安装、升级都要求 JDK 存在呢?
C
Chinbold Gansukh

https://i.stack.imgur.com/CBNux.png

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


很酷的图表!我有点困惑,java 命令在 JRE 之外被描绘,这是不正确的。我不明白为什么安装JDK时java命令有单独的文件,至少大小相同。在什么情况下,应用程序会使用 JRE 运行并使用 JDK 失败?最近经历过这种情况,可能应该回溯复制并深入了解它......
J
Jaimin Patel

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

JDK = JRE + 开发/调试工具 JRE = JVM + Java 包类(如 util、math、lang、awt、swing 等)+运行时库。 JVM = 类加载器系统 + 运行时数据区 + 执行引擎。

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

虚拟机:

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

JDK 和 JRE

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

Java 运行时环境 (JRE)

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

Java 开发工具包 (JDK)

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

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

JIT Compile Process (Courtesy: Oracle documentation)

https://i.stack.imgur.com/AaveN.png

https://i.stack.imgur.com/CBNux.png


当您说“编译”或“编译器”时,在您所指的上下文中非常混乱:将 java 源代码转换为 java 字节码,或将 java 字节码转换为机器码。
好的!我喜欢祖父、父子的比喻。 :D
是的,谢谢,很容易理解谁对这些术语不太熟悉。
W
Wanna Coffee

从官方java网站...

JRE(Java 运行时环境):

它是实际执行 Java 程序的 Java 虚拟机* 的实现。

Java Runtime Environment是运行java程序所需的插件。

JRE 比 JDK 小,因此它需要更少的磁盘空间。

JRE 可以从 https://www.java.com 免费下载/支持

它包括 JVM、Core 库和其他附加组件,用于运行用 Java 编写的应用程序和小程序。

JDK(Java 开发工具包)

它是一组软件,可用于开发基于 Java 的应用程序。

开发 Java 应用程序需要 Java Development Kit。

JDK 需要更多磁盘空间,因为它包含 JRE 以及各种开发工具。

JDK 可以从 https://www.oracle.com/technetwork/java/javase/downloads/ 免费下载/支持

它包括 JRE、一组 API 类、Java 编译器、Webstart 以及编写 Java 小程序和应用程序所需的其他文件。


D
David Robinson

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

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

什么是调试信息?以下是取自 this blog post 的简要说明:

现代编译器可以很好地将您的高级代码及其良好的缩进和嵌套控制结构以及任意类型的变量转换成一大堆称为机器码(或 Java 中的字节码)的位,其唯一目的是在目标 CPU(JVM 的虚拟 CPU)上尽可能快地运行。 Java 代码被转换成几个机器代码指令。变量被推到所有地方——堆栈、寄存器或完全优化。结果代码中甚至不存在结构和对象——它们只是一种抽象,可以转换为硬编码的偏移量到内存缓冲区中。那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在哪里停止呢?当您向它询问变量的值时,它如何设法找到要显示的内容?答案是——调试信息。调试信息由编译器与机器代码一起生成。它是可执行程序与原始源代码之间关系的一种表示。此信息被编码为预定义的格式并与机器代码一起存储。多年来为不同的平台和可执行文件发明了许多这样的格式。


e
emphasent

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

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

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

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


A
Alex

这是直接来自 Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/ 的简单回复

Java SE 运行时环境 (JRE)

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

Java SE 开发工具包 (JDK)

JDK 包括 JRE 以及命令行开发工具,例如对于开发小程序和应用程序而言必不可少或有用的编译器和调试器。


“SE”代表什么?标准版?
@SamSirry:是的,我想是的。 Wiki 在这里这样说:en.wikipedia.org/wiki/Java_Platform,_Standard_Edition
N
Nikhil Kumar

JRE

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

JDK

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

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

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


C
Chintan Patni

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

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

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

JDK 包括 JRE 以及命令行开发工具,例如对于开发小程序和应用程序而言必不可少或有用的编译器和调试器。


P
Pruthvi

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

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

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


n
nifCody

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

JDK

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

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

JRE

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

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


J
Jonathan Lam

如果您是 Java 程序员,您的系统中将需要 JDK,并且此软件包中还将包含 JRE 和 JVM,但如果您是喜欢玩网络游戏的普通用户,则您只需要 JRE,此软件包中不会包含 JDK .

JVM JVM(Java虚拟机)是一种抽象机器。它是一种提供运行时环境的规范,可以在其中执行 java 字节码。 JVM 可用于许多硬件和软件平台。 JVM、JRE 和 JDK 依赖于平台,因为每个操作系统的配置不同。但是,Java 是平台无关的。 JRE 它包含以编译形式运行 Java 应用程序所需的一切。你不需要任何图书馆和其他东西。您需要的所有内容都已编译。 JRE 不能用于开发,只能用于运行应用程序。 Java SE 开发工具包 (JDK) JDK 包括 JRE 以及命令行开发工具,例如开发小程序和应用程序所必需或有用的编译器和调试器。

(来源:GeeksForGeeks Q&AJava Platform Overview


有来自多个站点的抄袭(针对 JVM 和 JDK 部分)。下一次,请引用你的资料——这不是你的原创作品。
A
ABP

简单地 :

JVM 是 Java 代码在其上执行的虚拟机

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

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


C
Chandra Shekhar Goka

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

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

JDK Java 开发工具包 (JDK) 是一种软件开发环境,可用于开发和执行 Java 应用程序。它包括 JRE 和一组编程工具,例如 Java 编译器、解释器、appletviewer 和文档查看器。 JDK 通过 Java SE、Java EE 或 Java ME 平台实现。

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

为了全面了解,您可以查看我的博客:Jdk Jre Jvm and differences


M
Mayank Jain

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


@Noy:它不仅信息很少,而且不包含其他答案所没有的任何内容。
D
Dev

JDK 包括 JRE 以及命令行开发工具,例如对于开发小程序和应用程序而言必不可少或有用的编译器和调试器。

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

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

因此,按照@Jaimin Patel 所说,基本上 JVM < JRE < JDK。


S
Samarth Shah

JDK和JRE之间的区别在于JDK是Java的软件开发工具包,而JRE是运行程序的地方。


b
bishwas pokharel

假设,如果您是开发人员,那么您的角色是开发程序以及执行程序。所以你必须有JDK提供的开发和执行环境。

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

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

JDK=JRE+开发工具

JRE=JVM+库类


A
Akila

JRE

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

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

https://i.stack.imgur.com/fiwnE.jpg

JDK

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

https://i.stack.imgur.com/fWrJo.jpg


文本和图形中的信息都已在其他较早的答案中提供。