JDK和JRE有什么区别?
他们的角色是什么,我什么时候应该使用其中一个?
JRE 是 Java 运行时环境。它是运行已编译的 Java 程序所需的一切包,包括 Java 虚拟机 (JVM)、Java 类库、java
命令和其他基础设施。但是,它不能用于创建新程序。
JDK 是 Java 开发工具包,它是用于 Java 的全功能 SDK。它拥有 JRE 所拥有的一切,还包括编译器 (javac
) 和工具(如 javadoc
和 jdb
)。它能够创建和编译程序。
通常,如果您只关心在计算机上运行 Java 程序,您只会安装 JRE。这就是你所需要的。另一方面,如果您打算进行一些 Java 编程,则需要安装 JDK。
有时,即使您不打算在计算机上进行任何 Java 开发,您仍然需要安装 JDK。例如,如果您使用 JSP 部署 Web 应用程序,从技术上讲,您只是在应用程序服务器中运行 Java 程序。那你为什么需要JDK呢?因为应用服务器会将 JSP 转换为 Java servlet,需要使用 JDK 编译 servlet。我相信还有更多的例子。
上面的答案(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 一起使用。
https://i.stack.imgur.com/CBNux.png
JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具。 JRE 提供库、Java 虚拟机 (JVM) 和其他组件来运行用 Java 编程语言编写的小程序和应用程序。
通俗地说: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网站...
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 小程序和应用程序所需的其他文件。
从调试的角度来看的一个区别:
要调试 Java 系统类,例如 String 和 ArrayList,您需要使用“调试信息”编译的特殊版本的 JRE。 JDK 中包含的 JRE 提供了此信息,但常规 JRE 不提供。常规 JRE 不包含此信息以确保更好的性能。
什么是调试信息?以下是取自 this blog post 的简要说明:
现代编译器可以很好地将您的高级代码及其良好的缩进和嵌套控制结构以及任意类型的变量转换成一大堆称为机器码(或 Java 中的字节码)的位,其唯一目的是在目标 CPU(JVM 的虚拟 CPU)上尽可能快地运行。 Java 代码被转换成几个机器代码指令。变量被推到所有地方——堆栈、寄存器或完全优化。结果代码中甚至不存在结构和对象——它们只是一种抽象,可以转换为硬编码的偏移量到内存缓冲区中。那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在哪里停止呢?当您向它询问变量的值时,它如何设法找到要显示的内容?答案是——调试信息。调试信息由编译器与机器代码一起生成。它是可执行程序与原始源代码之间关系的一种表示。此信息被编码为预定义的格式并与机器代码一起存储。多年来为不同的平台和可执行文件发明了许多这样的格式。
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 的。
这是直接来自 Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/ 的简单回复
Java SE 运行时环境 (JRE)
JRE 为您提供运行用 Java 编程语言编写的小程序和应用程序所需的库、Java 虚拟机和其他组件。此运行时环境可以与应用程序一起重新分发,以使其独立。
Java SE 开发工具包 (JDK)
JDK 包括 JRE 以及命令行开发工具,例如对于开发小程序和应用程序而言必不可少或有用的编译器和调试器。
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。
JVM、JRE 和 JDK 依赖于平台,因为每个操作系统的配置不同。但是,Java 是平台无关的。
Java 虚拟机 (JVM) 是执行 Java 字节码的运行时系统。
JRE 是运行 Java 应用程序所需的环境(标准库和 JVM)。
JDK 包括 JRE 以及命令行开发工具,例如对于开发小程序和应用程序而言必不可少或有用的编译器和调试器。
JVM(Java虚拟机)是一种抽象机器。它是一种提供运行时环境的规范,可以在其中执行 java 字节码。
JRE是Java Runtime Environment的首字母缩写。它用于提供运行时环境。它是JVM的实现。它物理存在。它包含一组库+JVM在运行时使用的其他文件
JDK是Java Development Kit的缩写。它物理存在。它包含JRE+开发工具
如果您想运行 Java 程序而不是开发它们,请下载 Java 运行时环境或 JRE。如果您想开发它们,请下载 Java 开发工具包或 JDK
JDK
让我们称之为 JDK 是一个工具包,其中包括开发和运行 Java 应用程序所需的那些东西。
JDK 是作为构建应用程序、组件和小程序的开发环境而提供的。
JRE
它包含以编译形式运行 Java 应用程序所需的一切。你不需要任何图书馆和其他东西。您需要的所有内容都已编译。
JRE 不能用于开发,只能用于运行应用程序。
如果您是 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&A、Java Platform Overview)
简单地 :
JVM 是 Java 代码在其上执行的虚拟机
JRE 是运行 Java 应用程序所需的环境(标准库和 JVM)
JDK 是带有开发人员工具和文档的 JRE
清楚地理解这些术语(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
jdk 是编译成代码并将 java 代码转换为字节码所必需的,而 jre 是执行字节码所必需的。
JDK 包括 JRE 以及命令行开发工具,例如对于开发小程序和应用程序而言必不可少或有用的编译器和调试器。
JRE 基本上是运行 Java 程序的 Java 虚拟机。它还包括用于 Applet 执行的浏览器插件。
JDK 是一个抽象机器。它是一种提供运行时环境的规范,可以在其中执行 java 字节码。
因此,按照@Jaimin Patel 所说,基本上 JVM < JRE < JDK。
JDK和JRE之间的区别在于JDK是Java的软件开发工具包,而JRE是运行程序的地方。
假设,如果您是开发人员,那么您的角色是开发程序以及执行程序。所以你必须有JDK提供的开发和执行环境。
假设,如果您是客户,那么您不必担心开发。您只需要一个运行程序并仅获取结果的环境,它由 JRE 提供。
JRE 执行应用程序,但 JVM 逐行读取指令,因此它是解释器。
JDK=JRE+开发工具
JRE=JVM+库类
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
不定期副业成功案例分享