JDK和JRE有什么区别?
他们的角色是什么,我应该何时使用其中一个?
答案 0 :(得分:1055)
JRE 是 Java运行时环境。它是运行已编译Java程序所需的所有内容的包,包括Java虚拟机(JVM),Java类库,java
命令和其他基础结构。但是,它不能用于创建新程序。
JDK 是 Java Development Kit ,这是功能齐全的Java SDK。它包含JRE的所有内容,还包括编译器(javac
)和工具(如javadoc
和jdb
)。它能够创建和编译程序。
通常,如果您只关心在计算机上运行Java程序,则只会安装JRE。这就是你所需要的一切。另一方面,如果您计划进行一些Java编程,则需要安装JDK。
有时,即使您不打算在计算机上进行任何Java开发,仍然需要安装JDK。例如,如果要使用JSP部署Web应用程序,那么从技术上讲,您只是在应用程序服务器中运行Java程序。那你为什么需要JDK呢?因为应用程序服务器会将JSP转换为Java servlet,并且需要使用JDK来编译servlet。我相信还有更多的例子。
答案 1 :(得分:124)
上面的回答(由Pablo提出)是非常正确的。这只是其他信息。
JRE 顾名思义就是环境。它基本上是一堆与Java相关的文件,即:
bin/
包含Java的可执行程序。最重要的是java
(对于Windows,javaw
也是如此),它启动了JVM。此处还有一些其他实用程序,例如keytool
和policytool
。conf/
包含用户可编辑的配置文件,供Java专家使用。lib/
有大量支持文件:一些.jar
,配置文件,属性文件,字体,翻译,证书等 - 所有Java的“修剪”。最重要的是modules
,一个包含Java标准库的.class
文件的文件。.dll
或.dylib
下包含一些.so
(Windows)或bin/
(macOS)或lib/
(Linux)文件,并提供支持,系统特定的原生二进制代码。JDK 也是一组目录。它是JRE的超集,有一些补充:
bin/
已经扩展了开发工具。其中最重要的是javac
;其他人包括jar
,javadoc
和jshell
。jmods/
,其中包含标准库的JMOD文件。这些文件允许标准库与jlink
一起使用。答案 2 :(得分:116)
JDK是JRE的超集,包含JRE中的所有内容,以及开发applet和应用程序所需的编译器和调试器等工具。 JRE提供库,Java虚拟机(JVM)和其他组件来运行用Java编程语言编写的applet和应用程序。
答案 3 :(得分:85)
通俗地说: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成为“可移植语言”的实体(只需编写一次,随处运行)。实际上,JVM的特定实现适用于不同的系统(Windows,Linux,MacOS,请参阅维基百科列表..),目的是使用相同的字节码,它们都会给出相同的结果。
JDK和JRE
要解释JDK和JRE之间的区别,最好阅读Oracle文档并参考图表:
Java运行时环境(JRE)
Java Runtime Environment(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的人。
答案 4 :(得分:25)
来自官方java网站...
JRE(Java运行时环境):
JDK(Java开发工具包)
答案 5 :(得分:23)
与调试角度的一个区别:
要调试Java系统类(如String和ArrayList),需要使用“调试信息”编译的特殊版本的JRE。 JDK中包含的JRE提供了此信息,但常规JRE不提供此信息。常规JRE不包含此信息以确保更好的性能。
什么是调试信息?以下是this blog post:
的快速解释现代编译器可以很好地将高级代码转换为一个很好的缩进和嵌套控制结构以及任意类型的变量,这些变量被称为机器代码(或Java中的字节码),这是唯一的目的其中包括在目标CPU(JVM的虚拟CPU)上尽可能快地运行。 Java代码被转换为多个机器代码指令。变量遍布整个地方 - 进入堆栈,进入寄存器或完全优化掉。结果和对象甚至不存在于结果代码中 - 它们只是一种抽象 它被转换为硬编码的偏移量到内存缓冲区。
那么当你要求它在某个函数的入口处中断时,调试器如何知道停止的位置?当您向它询问变量的值时,它如何设法找到显示给您的内容? 答案是 - 调试信息。
调试信息由编译器与机器代码一起生成。它表示可执行程序和原始源代码之间的关系。该信息被编码为预定义的格式并与机器代码一起存储。多年来,针对不同平台和可执行文件发明了许多这样的格式。
答案 6 :(得分:8)
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。
答案 7 :(得分:8)
JVM,JRE和JDK是平台相关的,因为每个操作系统的配置不同。但是,Java与平台无关。
Java虚拟机(JVM)是一个执行Java字节码的运行时系统。
JRE是运行Java应用程序所需的环境(标准库和JVM)。
JDK包括JRE以及编译器和调试器等命令行开发工具,这些工具对于开发applet和应用程序是必要或有用的。
答案 8 :(得分:7)
这是一个直接来自Oracle的简单回复 http://docs.oracle.com/javase/7/docs/technotes/guides/
Java SE运行时环境(JRE)
JRE提供了运行以Java编程语言编写的applet和应用程序所需的库,Java虚拟机和其他组件。可以使用应用程序重新分发此运行时环境,使其独立。
Java SE开发工具包(JDK)
JDK包括JRE以及编译器和调试器等命令行开发工具,这些工具对于开发applet和应用程序是必要或有用的。
答案 9 :(得分:7)
如果要运行Java程序但不要开发它们,请下载Java运行时环境或JRE。如果要开发它们,请下载Java Development Kit或JDK
我们称之为JDK是一个工具包,其中包括开发和运行java应用程序所需的内容。
JDK作为构建应用程序,组件和applet的开发环境提供。
它包含以编译形式运行Java应用程序所需的一切。你不需要任何图书馆和其他东西。你需要的所有东西都被编译好了
JRE不能用于开发,仅用于运行应用程序。
答案 10 :(得分:7)
JVM,JRE,JDK - 这些都是Java语言的支柱。每个组件分开工作。 Jdk和Jre在物理上存在,但Jvm是一个抽象的机器,这意味着它没有物理存在。
JVM 是JDK和JRE的子系统,用于检查中间代码是否为Bytecode。它首先通过JVM子系统类加载器加载由Java编译器(Javac)生成的.c扩展名的“类文件”,并根据用途分类内存位置(类区域,堆栈,堆和pc寄存器)。然后检查所有字节码以确保它在java中返回并且网络具有所有内存可访问性访问权限。在解释器工作开始之后,解释器检查整个程序行方式,最后通过运行时设备的JRE(Java运行时环境)显示在控制台,浏览器和应用程序中的结果。
JRE 也是JDK的一个子系统,它提供JVM,类,可执行文件(如.jar文件等)等运行时工具。
JDK 代表Java Development Kit它包含编程中使用的所有必要组件,如类,方法,swing,AWT,包,java(解释器),javac(编译器),appletviewer(applet应用程序查看器)因此,最后的结论是它将每个文件的内容都用于开发独立或基于Web的应用程序。
答案 11 :(得分:6)
JVM(Java虚拟机)是一个抽象机器。它是一个规范,提供可以执行java字节码的运行时环境。
JRE是Java Runtime Environment的首字母缩写。它用于提供运行时环境。它是JVM的实现。它实际上是存在的。它包含JVM在运行时使用的一组库+其他文件
JDK是Java Development Kit的首字母缩写。它实际上是存在的。它包含JRE +开发工具
答案 12 :(得分:6)
清楚地理解这些术语(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
答案 13 :(得分:6)
如果您是 Java程序员,系统中将需要 JDK ,此软件包也将包含JRE和JVM,但如果您是普通用户< / strong>谁喜欢玩在线游戏,那么你只需要 JRE ,这个软件包就不会有JDK。
JVM
JVM(Java虚拟机)是一个抽象机器。它是一个 规范,提供java字节码的运行时环境 可以执行。
JVM可用于许多硬件和软件平台。 JVM,JRE 和JDK是平台相关的,因为每个操作系统的配置 不同。但是,Java与平台无关。
<强> JRE 强>
它包含在编译时运行Java应用程序所需的一切 形成。你不需要任何图书馆和其他东西。你做的一切 需要编译。
JRE不能用于开发,仅用于运行 应用
Java SE开发工具包(JDK)
JDK包括JRE以及命令行开发工具,如 编译器和调试器,对于开发是必要或有用的 小应用程序和应用程序。
答案 14 :(得分:5)
jdk是编译代码并将java代码转换为字节代码所必需的,而jre是执行字节代码所必需的。
答案 15 :(得分:5)
简单地说:
JVM是在
上执行的虚拟机Java代码JRE是运行Java应用程序所需的环境(标准库和JVM)
JDK是带有开发人员工具和文档的JRE
答案 16 :(得分:5)
JDK 包括JRE plus命令行开发工具,例如编译器和调试器,它们对于开发applet和应用程序是必需的或有用的。
JRE 基本上是运行Java程序的Java虚拟机。它还包括用于Applet执行的浏览器插件。
JDK 是一个抽象机器。它是一个规范,提供可以执行java字节码的运行时环境。
所以,基本上JVM&lt; JRE&lt; JDK根据@Jaimin Patel所说。
答案 17 :(得分:4)
假设,如果您是开发人员,那么您的角色是开发程序以及执行程序。所以你必须拥有开发和执行的环境,这是由JDK提供的。
假设,如果您是客户,那么您不必担心开发。您只需要一个运行程序并获得结果的环境,这是由JRE提供的。
JRE执行应用程序,但JVM逐行读取指令,因此它是解释器。
JDK = JRE +开发工具
JRE = JVM +库类
答案 18 :(得分:4)
JDK和JRE之间的区别在于JDK是java的软件开发工具包,而JRE是运行程序的地方。
答案 19 :(得分:2)