JDK和JRE有什么区别?


Answers:


1222

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。我相信还有更多的例子。


4
然后,当我们使用外部jar时,我们会将这些jar部署在jre / lib / ext /中。为什么呢?
i2ijeya

2
有一些jar专门用作Java的扩展。那些可以并且应该放在lib / ext中。但是放置任何旧的应用程序jar并不是该目录的目的;这是对扩展机制的滥用,以后可能会引起问题。
卡尔·斯莫特里兹

我已经使用了JExcel API,并且已经正确设置了类路径,但是仍然存在问题。所以我将其部署在tlib / ext文件夹中,之后可以正常使用吗?那是什么原因呢?
i2ijeya,2009年

3
我没有完全确定的信息,但是我的猜测可能是您没有真正正确地设置类路径,或者为不同于最终使用代码的类加载器设置了类路径。使lib / ext与classpath扩展不同的是,lib / ext将影响使用该特定JRE的任何 Java应用程序-比设置类路径更简单。
卡尔·斯莫特里兹

几个星期前,我遇到了相当大的故障,可以通过更改我的JAVA_HOME和Path环境变量来引用JRE而不是JDK来纠正。在哪种情况下,应用程序将使用JRE起作用,而JDK失败?我想我应该提一个新问题。有趣的是,从1.6版开始,JRE已包含在JDK安装中,但与JDK文件夹的解压缩级别相同,而在1.5版及更低版本中,JRE文件夹在JDK中。BTW:好的答案!
杰西·艾维

143

上面的答案(巴勃罗)是正确的。这只是附加信息。

JRE是,顾名思义,一个环境。基本上,这是一堆带有Java相关文件的目录,例如:

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

JDK也是一组目录。它是JRE的超集,并具有一些附加功能:

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

1
这是否意味着我可以将路径变量设置为JDK就是这样?
2014年

3
@布雷迪:是的,我想是的。至少对我来说这很好。作为开发人员,我基本上忽略了JRE。如果在某些特殊情况下您特别想要JRE,则我不知道它们。
2014年

JRE只能使用编译的Java代码,对吗?
2014年

2
@Cupidvogel,由于JRE中没有编译器,我想您可以这么说。JRE可以运行(编译)Java代码,而JDK还为您提供开发它的工具。
2014年

1
因此,JDK基本上包括一个用于编译代码的编译器(如Javac),一个用于执行已编译代码的JRE(运行时系统),以及其他旨在使程序员的开发变得容易,正确的工具?因此AFAIU,只有Javac和JRE是这里真正必要的工具。那么,为什么为什么很多时候软件安装,升级坚持使用JDK?
2014年

130

在此处输入图片说明

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


3
酷图!我有点困惑,Java命令在JRE外部显示,这是不正确的。我不明白为什么安装JDK时至少要有大小相同的java命令的单独文件。在哪种情况下,应用程序将使用JRE起作用,而JDK失败?最近经历了这一点,可能应该追迹复制并深入研究……
Jesse Ivy 2015年

104

用外行人的话来说: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文件以获得* .class文件的原因,这些文件包含JVM可以理解的字节码。它也是使Java成为一种“便携式语言”(一次编写,可在任何地方运行)的实体。实际上,对于不同的系统(Windows,Linux,MacOS,请参见Wikipedia列表。),存在JVM的特定实现,其目的是使用相同的字节码,它们都可以提供相同的结果。

JDK和JRE

为了解释JDK和JRE之间的区别,最好是阅读Oracle文档并查阅下图:

Java运行时环境(JRE)

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

Java开发套件(JDK)

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

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

JIT编译过程(由Oracle文档提供)

JDK> JRE> JVM


当您说“编译”或“编译器”时,在您所指的上下文中,这非常令人困惑:将Java源代码转换为Java字节代码,或将Java字节代码转换为机器代码。
OrangeSherbet,

真好!我喜欢祖父,父亲和儿子的比喻。:D
Emzor

是的,非常容易理解,谁对这些术语不太熟悉。
Jaimin Patel

25

从Java官方网站...

JRE(Java运行时环境):

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

JDK(Java开发套件)

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

23

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

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

什么是调试信息?这是此博客文章的简要说明:

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

那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在何处停止?当您询问变量值时,如何设法找到要显示的内容?答案是–调试信息。

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


9

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编程中使用的所有必需组件,例如类,方法,swing,AWT,程序包,Java(解释器),javac(编译器),appletviewer(applet应用程序查看器)等。总而言之,它包含开发所需的每个文件应用程序,无论是独立的还是基于Web的。


8

杰瑞

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。


8

JVM,JRE和JDK依赖于平台,因为每个OS的配置都不同。但是,Java是平台无关的。

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

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

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


7

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

Java SE运行时环境(JRE)

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

Java SE开发套件(JDK)

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


7

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

JDK

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

JDK被提供为用于构建应用程序,组件和小程序的开发环境。

杰瑞

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

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


6

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

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

JDK是Java Development Kit的首字母缩写,它实际存在,包含JRE +开发工具


6

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

虚拟机

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

JVM可用于许多硬件和软件平台。JVM,JRE和JDK依赖于平台,因为每个OS的配置都不同。但是,Java是平台无关的。

杰瑞

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

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

Java SE开发套件(JDK)

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

(来源:GeeksForGeeks问答Java平台概述


来自多个站点的窃(针对JVM和JDK部分)。下次,请引用您的消息来源-这不是您的原创作品。
乔纳森·林

6

明确理解这些术语(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和差异



5

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

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

JDK是抽象机。它是提供可在其中执行Java字节码的运行时环境的规范。

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


5

简单地:

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

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

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



4

假设,如果您是一名开发人员,那么您的角色就是开发程序并执行程序。因此,您必须具有JDK提供的用于开发和执行的环境。

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

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

JDK = JRE +开发工具

JRE = JVM +库类


2

杰瑞

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

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

在此处输入图片说明

JDK

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

在此处输入图片说明


文本和图形中的信息均已在其他较早的答案中提供。
里希
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.