【发布时间】:2010-12-26 18:14:37
【问题描述】:
JDK和JRE有什么区别?
他们的角色是什么?我什么时候应该使用其中一个?
【问题讨论】:
-
这个问题的简洁明了的答案可以在:java.com/en/download/faq/techinfo.xml
-
@kenorb 基于时间戳,链接的问题似乎与此问题重复。
标签: java
JDK和JRE有什么区别?
他们的角色是什么?我什么时候应该使用其中一个?
【问题讨论】:
标签: java
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 的所有“修饰”。最重要的是modules,该文件包含Java 标准库的.class 文件。bin/ 或lib/ 下包含一些.dll (Windows) 或.dylib (macOS) 或.so (Linux) 文件,以及支持系统特定的本机二进制代码。JDK 也是一组目录。它是 JRE 的超集,有一些补充:
bin/ 已通过开发工具扩大。其中最重要的是javac;其他包括jar、javadoc 和jshell。jmods/。这些文件允许标准库与jlink 一起使用。【讨论】:
来自官方java网站...
JRE(Java 运行时环境):
JDK(Java 开发工具包)
【讨论】:
从调试角度来看的一个区别:
要调试 Java 系统类,如 String 和 ArrayList,您需要使用“调试信息”编译的特殊版本的 JRE。 JDK 中包含的 JRE 提供了此信息,但常规 JRE 不提供。常规 JRE 不包含此信息以确保更好的性能。
什么是调试信息?以下是来自this blog post 的快速解释:
现代编译器可以很好地将您的高级代码,其良好的缩进和嵌套控制结构和任意类型的变量转换成一大堆称为机器码(或 Java 中的字节码)的位,唯一的目的其中是在目标 CPU(JVM 的虚拟 CPU)上尽可能快地运行。 Java 代码被转换成几个机器代码指令。变量被推到所有地方——堆栈、寄存器或完全优化。结果代码中甚至不存在结构和对象——它们只是一种抽象 它被转换为硬编码的偏移量到内存缓冲区中。
那么当你要求调试器在某个函数的入口处中断时,它是如何知道在哪里停止的呢?当您向它询问变量的值时,它如何设法找到要显示的内容? 答案是——调试信息。
调试信息由编译器与机器代码一起生成。它是可执行程序与原始源代码之间关系的一种表示。此信息被编码为预定义的格式并与机器代码一起存储。多年来为不同的平台和可执行文件发明了许多这样的格式。
【讨论】:
JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发小程序和应用程序所需的编译器和调试器等工具。 JRE 提供库、Java 虚拟机 (JVM) 和其他组件来运行用 Java 编程语言编写的小程序和应用程序。
【讨论】:
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。
【讨论】:
这是直接来自 Oracle 的简单回复 http://docs.oracle.com/javase/7/docs/technotes/guides/
Java SE 运行时环境 (JRE)
JRE 为您提供运行以 Java 编程语言编写的小程序和应用程序所需的库、Java 虚拟机和其他组件。此运行时环境可以与应用程序一起重新分发,以使其独立。
Java SE 开发工具包 (JDK)
JDK 包括 JRE 以及命令行开发工具,例如编译器和调试器,这些工具对于开发小程序和应用程序是必要或有用的。
【讨论】:
JVM(Java 虚拟机)是一种抽象机器。它是一种提供运行环境的规范,可以在其中执行java字节码。
JRE是Java Runtime Environment的首字母缩写,用于提供运行时环境,是JVM的实现,物理存在,包含一组库+JVM在运行时使用的其他文件
JDK是Java Development Kit的缩写,物理存在,包含JRE+开发工具
【讨论】:
如果您想运行 Java 程序,但不想开发它们,请下载 Java 运行时环境或 JRE。如果您想开发它们,请下载 Java 开发工具包或 JDK
我们称之为 JDK 是一个工具包,其中包括开发和运行 Java 应用程序所需的那些东西。
JDK 是作为构建应用程序、组件和小程序的开发环境而提供的。
它包含以编译形式运行 Java 应用程序所需的一切。你不需要任何图书馆和其他东西。您需要的所有内容都已编译。
JRE 不能用于开发,只能用于运行应用程序。
【讨论】:
通俗地说:JDK 是祖父 JRE 是父亲,JVM 是他们的儿子。 [即JDK > JRE > JVM]
JDK = JRE + 开发/调试工具
JRE = JVM + Java 包类(如 util、math、lang、awt、swing 等)+运行时库。
JVM = 类加载器系统 + 运行时数据区 + 执行引擎。
换句话说,如果您是Java程序员,您的系统中将需要JDK,并且该软件包还将包括JRE和JVM,但是如果您是喜欢玩在线游戏的普通用户,那么您只需要JRE和这个软件包里面不会有 JDK。
JVM:
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 的。
【讨论】:
jdk 是编译成代码并将 java 代码转换为字节码所必需的,而 jre 是执行字节码所必需的。
【讨论】:
JDK 和 JRE 的区别在于,JDK 是 Java 的软件开发工具包,而 JRE 是运行程序的地方。
【讨论】:
假设,如果您是开发人员,那么您的角色是开发程序以及执行程序。所以你必须有JDK提供的开发和执行环境。
假设,如果您是客户,那么您不必担心开发。您只需要一个运行程序并获得结果的环境,由JRE提供。
JRE 执行应用程序,但 JVM 逐行读取指令,因此它是解释器。
JDK=JRE+开发工具
JRE=JVM+库类
【讨论】:
清楚了解这些术语(JVM、JDK、JRE)对于掌握它们的用法和区别至关重要。
JVM Java 虚拟机 (JVM) 是执行 Java 字节码的运行时系统。 JVM 就像一台虚拟计算机,可以执行一组编译指令并操纵内存位置。当 Java 编译器编译源代码时,它会在 .class 文件中生成一组高度优化的指令,称为字节码。 JVM 会解释这些字节码指令,并将它们转换为特定于机器的代码以供执行。
JDK Java Development Kit (JDK) 是一个软件开发环境,可用于开发和执行 Java 应用程序。它包括 JRE 和一组编程工具,例如 Java 编译器、解释器、appletviewer 和文档查看器。 JDK 通过 Java SE、Java EE 或 Java ME 平台实现。
JRE Java 运行时环境 (JRE) 是 JDK 的一部分,它包括一个 JVM、核心类和几个支持应用程序开发的库。虽然 JRE 作为 JDK 的一部分提供,但您也可以单独下载和使用它。
如需全面了解,您可以查看我的博客:Jdk Jre Jvm and differences
【讨论】:
如果您是 Java 程序员,您的系统中将需要 JDK,此软件包也将包含 JRE 和 JVM,但如果您是 普通用户 喜欢玩网络游戏的,你只需要JRE,这个包里面没有JDK。
JVM
JVM(Java 虚拟机)是一种抽象机器。它是一个 提供运行时环境的规范,其中 java 字节码 可以执行。
JVM 可用于许多硬件和软件平台。 JVM、JRE 和 JDK 是平台相关的,因为每个操作系统的配置 不同。但是,Java 是独立于平台的。
JRE
它包含在编译后运行 Java 应用程序所需的一切 形式。你不需要任何图书馆和其他东西。你的一切 需要编译。
JRE 不能用于开发,只能用于运行 应用程序。
Java SE 开发工具包 (JDK)
JDK 包括 JRE 以及命令行开发工具,例如 开发所需或有用的编译器和调试器 小程序和应用程序。
【讨论】:
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 的。
【讨论】:
JDK 包括 JRE 以及命令行开发工具,例如开发小程序和应用程序所必需或有用的编译器和调试器。
JRE 基本上是运行 Java 程序的 Java 虚拟机。它还包括用于执行 Applet 的浏览器插件。
JDK 是一个抽象机器。它是一种提供运行环境的规范,可以在其中执行 java 字节码。
所以,按照@Jaimin Patel 所说,基本上 JVM
【讨论】:
简单地说:
JVM 是 Java 代码在其上执行的虚拟机
JRE 是运行 Java 应用程序所需的环境(标准库和 JVM)
JDK 是带有开发人员工具和文档的 JRE
【讨论】:
JVM、JRE 和 JDK 依赖于平台,因为每个操作系统的配置不同。但是,Java 是平台无关的。
Java 虚拟机 (JVM) 是执行 Java 字节码的运行时系统。
JRE 是运行 Java 应用程序所需的环境(标准库和 JVM)。
JDK 包括 JRE 以及命令行开发工具,例如编译器和调试器,这些工具对于开发小程序和应用程序是必要或有用的。
【讨论】: