JDK和JRE有什么区别?

i2i*_*eya 857 java

JDK和JRE有什么区别?
他们的角色是什么,我应该何时使用其中一个?

Pab*_*ruz 1138

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

  • 然后,当我们使用外部jar时,我们正在jre/lib/ext /中部署这些jar.那么为什么呢? (4认同)
  • 我没有完全确定的信息,但我猜你要么没有真正设置类路径,要么为不同的类加载器设置类路径而不是最终使用代码的类路径.lib/ext与classpath扩展的不同之处在于lib/ext会影响使用该特定JRE的*any*java应用程序 - 它比设置类路径更加简单. (3认同)
  • 有一些专门用作Java扩展的jar; 那些可以而且应该放在lib/ext中.但是放置任何旧的应用程序jar并不是这个目录的用途; 这是对滥用扩展机制的滥用,可能会在以后引起问题. (2认同)

Car*_*icz 131

上面的答案(由巴勃罗)是非常正确的.这只是其他信息.

JRE是,顾名思义,一个环境.它基本上是一堆带有Java相关文件的目录,即:

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

JDK也是一组目录.它是JRE的超集,有一些补充:

  • bin/随着开发工具的扩大.其中最重要的是javac; 其他包括jar,javadocjshell.
  • jmods/已添加,其中包含标准库的JMOD文件.这些文件允许使用标准库jlink.

  • @Brady:是的,我想是的.这对我来说很好,至少.作为开发人员,我基本上忽略了JRE.如果您特别想要JRE的特殊情况,我不知道它们. (3认同)
  • @Cupidvogel,由于 JRE 中没有编译器,我想您可以这么说。JRE 用于*运行*(已编译)Java 代码,而 JDK 还为您提供了开发它的工具。 (2认同)

小智 123

在此输入图像描述

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

  • 酷图!我有点困惑的是java命令在JRE之外被描绘,这是不正确的.我不明白为什么安装JDK时java命令有单独的文件,其大小至少相同.在什么情况下,应用程序将使用JRE并使用JDK失败?最近遇到过这种情况,应该可以回复并复制到底层...... (2认同)

Jai*_*tel 96

通俗地说: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运行时环境(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的人.

JIT编译过程(礼貌:Oracle文档)

JDK> JRE> JVM

  • 好的!我喜欢祖父、父亲和儿子的比喻。:D (2认同)

Wan*_*fee 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代码被转换为多个机器代码指令.变量遍布整个地方 - 进入堆栈,进入寄存器或完全优化掉.结构和对象甚至不存在于生成的代码中 - 它们只是一种抽象,可以转换为硬编码的偏移到内存缓冲区.

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

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


Nik*_*mar 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.


小智 8

JVM,JRE和JDK是平台相关的,因为每个操作系统的配置不​​同.但是,Java与平台无关.

Java虚拟机(JVM)是​​一个执行Java字节码的运行时系统.

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

JDK包括JRE以及编译器和调试器等命令行开发工具,这些工具对于开发applet和应用程序是必要或有用的.


Ale*_*lex 7

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

Java SE运行时环境(JRE)

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

Java SE开发工具包(JDK)

JDK包括JRE以及编译器和调试器等命令行开发工具,这些工具对于开发applet和应用程序是必要或有用的.


nif*_*ody 7

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

JDK

我们称之为JDK是一个工具包,其中包括开发和运行java应用程序所需的内容.

JDK作为构建应用程序,组件和applet的开发环境提供.

JRE

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

JRE不能用于开发,仅用于运行应用程序.


小智 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开发工具包它包含所有必要的组件,用于编程,如类,方法,swing,AWT,包,java(解释器),javac(编译器),appletviewer(applet应用程序查看器)等.所以最后的结论是它内容每一个在开发应用程序时有用的文件可以单独使用,也可以基于Web使用.


Pru*_*mar 6

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

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

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


Cha*_*oka 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和差异


小智 6

如果你是一个Java程序员,你需要在你的系统中使用JDK,这个软件包也包括JRE和JVM,但如果你是喜欢玩在线游戏的普通用户那么你只需要JRE而且这个软件包里面不会有JDK .

JVM

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

JVM可用于许多硬件和软件平台.JVM,JRE和JDK是平台相关的,因为每个操作系统的配置不​​同.但是,Java与平台无关.

JRE

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

JRE不能用于开发,仅用于运行应用程序.

Java SE开发工具包(JDK)

JDK包括JRE以及编译器和调试器等命令行开发工具,这些工具对于开发applet和应用程序是必要或有用的.

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


小智 5

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

  • @Noy:它不仅信息很少,而且其他答案也没有包含任何内容. (5认同)

小智 5

JDK包括JRE plus命令行开发工具,例如编译器和调试器,它们对于开发applet和应用程序是必要或有用的.

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

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

所以,基本上JVM <JRE <JDK如@Jaimin Patel所说.


小智 5

简单地说

JVM是Java代码执行的虚拟机

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

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