JDK和JRE有什么区别?
它们的作用是什么,何时应使用其中一个?
JDK和JRE有什么区别?
它们的作用是什么,何时应使用其中一个?
Answers:
该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。我相信还有更多的例子。
上面的答案(巴勃罗)是正确的。这只是附加信息。
该JRE是,顾名思义,一个环境。基本上,这是一堆带有Java相关文件的目录,例如:
bin/
包含Java的可执行程序。最重要的是java
(对于Windows javaw
也是如此),它将启动JVM。这里还有一些其他实用程序,例如keytool
和policytool
。conf/
拥有用户可编辑的配置文件,供Java专家使用。lib/
有大量的支持文件:一些.jar
,配置文件,属性文件,字体,翻译,证书等– Java的所有“整理”。最重要的是modules
一个文件,其中包含.class
Java标准库的文件。.dll
(Windows)或.dylib
(macOS)或.so
(Linux)文件,这些文件位于bin/
或lib/
带有受支持的特定于系统的本机二进制代码下。在JDK也是一组目录。它是JRE的超集,并具有一些附加功能:
bin/
已使用开发工具进行了扩展。其中最重要的是javac
; 其他还包括jar
,javadoc
和jshell
。jmods/
已添加,其中包含用于标准库的JMOD文件。这些文件允许标准库与一起使用jlink
。JDK是JRE的超集,包含JRE中的所有内容,以及开发applet和应用程序所需的工具,例如编译器和调试器。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。
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的公司。
从Java官方网站...
JRE(Java运行时环境):
JDK(Java开发套件)
从调试的角度来看,有一个区别:
要调试Java系统类(例如String和ArrayList),您需要使用“调试信息”编译的特殊版本的JRE。JDK中包含的JRE提供了此信息,但常规JRE没有提供。常规JRE不包含此信息以确保更好的性能。
什么是调试信息?这是此博客文章的简要说明:
现代的编译器将其高级代码缩进和嵌套的控制结构以及任意类型的变量转换为一大堆称为机器代码(在Java中为字节码)的位,可以很好地转换您的高级代码。在目标CPU(JVM的虚拟CPU)上尽可能快地运行。Java代码被转换为多个机器代码指令。变量到处都是-放入堆栈,寄存器或完全优化。结构和对象甚至不存在于生成的代码中–它们只是一种抽象,可以转换为硬编码的偏移量到内存缓冲区中。
那么,当您要求调试器在某个函数的入口处中断时,调试器如何知道在何处停止?当您询问变量值时,如何设法找到要显示的内容?答案是–调试信息。
调试信息由编译器与机器代码一起生成。它表示可执行程序和原始源代码之间的关系。该信息被编码为预定义的格式,并与机器代码一起存储。多年来,针对不同的平台和可执行文件发明了许多此类格式。
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的。
杰瑞
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编程语言编写的applet和应用程序所需的库,Java虚拟机和其他组件。可以随应用程序一起重新分发此运行时环境,以使其独立。
Java SE开发套件(JDK)
JDK包括JRE以及命令行开发工具,例如对于开发applet和应用程序必不可少或有用的编译器和调试器。
JVM(Java虚拟机)是抽象机。它是提供可在其中执行Java字节码的运行时环境的规范。
JRE是Java Runtime Environment的首字母缩写,用于提供运行时环境,它是JVM的实现,实际上存在,它包含JVM在运行时使用的一组库和其他文件
JDK是Java Development Kit的首字母缩写,它实际存在,包含JRE +开发工具
如果您是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,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和差异
JDK和JRE之间的区别在于JDK是Java的软件开发套件,而JRE是运行程序的地方。