关于java:JDK和JRE有什么区别?

What is the difference between JDK and JRE?

JDK和JRE有什么区别?他们的角色是什么?我什么时候应该使用他们的角色?


JRE是Java运行时环境。它是运行编译的Java程序所必需的一切包,包括Java虚拟机(JVM)、Java类库、EDCOX1 OR 0命令和其他基础设施。但是,它不能用于创建新程序。

JDK是Java开发工具包,是Java的全功能SDK。它拥有JRE所拥有的一切,还有编译器(javac和工具(如javadocjdb)。它能够创建和编译程序。

通常,如果只关心在计算机上运行Java程序,则只安装JRE。这是你所需要的。另一方面,如果您打算做一些Java编程,则需要安装JDK。

有时,即使你不打算在计算机上做任何Java开发,你仍然需要安装JDK。例如,如果使用JSP部署Web应用程序,那么技术上只需在应用服务器内部运行Java程序即可。那你为什么需要JDK呢?因为应用服务器将把JSP转换成Java servlet,需要使用JDK编译servlet。我相信还有更多的例子。


上面的答案(帕布罗)是非常正确的。这只是附加信息。

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

  • EDCOX1(4)包含Java的可执行程序。最重要的是启动JVM的java(对于Windows,javaw)。这里还有其他一些实用程序,如keytoolpolicytool
  • EDCOX1(9)包含用户可编辑的配置文件,供Java专家使用。
  • EDCOX1,10,拥有大量的支持文件:一些EDCOX1,11,S,配置文件,属性文件,字体,翻译,证书等等。最重要的是EDCOX1(12),一个包含Java标准库的EDOCX1×13文件的文件。
  • 在某种程度上,Java标准库需要调用本机代码。为此,JRE包含一些.dll.dylib.so文件(在bin/lib/下),这些文件支持特定于系统的本机二进制代码。

JDK也是一组目录。它是JRE的一个超集,并添加了一些内容:

  • 用开发工具扩大了bin/。其中最重要的是javac;其他的包括jarjavadocjshell
  • 增加了保存标准库jmod文件的jmods/。这些文件允许标准库与jlink一起使用。


enter image description here

JDK is a superset of JRE, and contains everything that is in JRE, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language.


外行术语:jdk是祖父,jre是父亲,jvm是他们的儿子。[即jdk>jre>jvm]

JDK = JRE + Development/debugging tools

JRE = JVM + Java Packages Classes(like util, math, lang, awt,swing etc)+runtime libraries.

JVM = Class loader system + runtime data area + Execution Engine.

换句话说,如果你是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运行时环境

Java运行时环境(JRE)提供库、Java虚拟机和其他组件来运行用Java编程语言编写的小应用程序和应用程序。此外,两个关键部署技术是JRe:Java插件的一部分,它允许applet在流行浏览器中运行;以及Java Web start,它通过网络部署独立的应用程序。它也是Java 2平台、企业版(J2EE)技术在企业软件开发和部署中的基础。JRE不包含用于开发小程序和应用程序的工具和实用程序,如编译器或调试程序。

Java开发工具包(JDK)

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

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

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

JDK >jre>jvm


从官方Java网站…

JRE(Java运行时环境):

  • 它是Java虚拟机的一个实现,它实际上执行Java程序。
  • Java运行时环境是运行Java程序所需的插件。
  • JRE比JDK小,因此需要的磁盘空间更少。
  • 可从以下网站免费下载/支持JRE:网址:https://www.java.com
  • 它包括JVM、核心库和其他附加组件来运行Java编写的应用程序和小应用程序。

JDK(Java开发工具包)

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

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

要调试到诸如String和ArrayList之类的Java系统类,需要使用"调试信息"编译的JRE的特殊版本。JDK中包含的JRE提供了这个信息,但是常规的JRE没有。常规的JRE不包括这些信息以确保更好的性能。

什么是调试信息?以下是此博客文章的快速解释:

Modern compilers do a pretty good job converting your high-level code, with its nicely indented and nested control structures and arbitrarily typed variables into a big pile of bits called machine code (or bytecode in case of Java), the sole purpose of which is to run as fast as possible on the target CPU (virtual CPU of your JVM). Java code gets converted into several machine code instructions. Variables are shoved all over the place – into the stack, into registers, or completely optimized away. Structures and objects don’t even exist in the resulting code – they’re merely an abstraction
that gets translated to hard-coded offsets into memory buffers.

So how does a debugger know where to stop when you ask it to break at the entry to some function? How does it manage to find what to show you when you ask it for the value of a variable?
The answer is – debugging information.

Debugging information is generated by the compiler together with the machine code. It is a representation of the relationship between the executable program and the original source code. This information is encoded into a pre-defined format and stored alongside the machine code. Many such formats were invented over the years for different platforms and executable files.


由于每个操作系统的配置不同,因此JVM、JRE和JDK依赖于平台。但是,Java是独立于平台的。

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

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

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


JRE

JRE是Java运行时环境的缩写。它用于提供运行时环境。它是JVM的实现。它是物理存在的。它包含一组库+ JVM在运行时使用的其他文件。

JDK

JDK是Java开发工具包的缩写。它物理上存在。它包含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和命令行开发工具,如编译器和调试程序,这些工具对于开发小程序和应用程序是必要的或有用的。


如果您想运行Java程序,而不开发Java程序,请下载Java运行时环境或JRE。如果您想开发它们,请下载Java开发工具包或JDK。

JDK

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

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

JRE

它包含了以编译的形式运行Java应用程序所需的一切内容。你不需要任何图书馆和其他东西。所有你需要的东西都被编译了。

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


JVM、JRE、JDK——这些都是Java语言的主干。每个组件单独工作。JDK和JRE实际存在,但JVM是一个抽象的机器,这意味着它没有实际存在。

jvm是jdk和jre的子系统,用于检查中间代码称为字节码。它首先通过Java编译器(JavaC)生成的"类文件"加载到JVM子系统类加载器中,并根据所使用的分类存储位置(类区域、堆栈、堆和PC寄存器)。然后检查所有Bytecode,以确保它在Java中返回,并且所有的内存可访问性被网络访问。在解释器工作开始后,解释器通过JRE(Java运行时环境)运行时设备检查整个程序的行线,最后显示控制台、浏览器和应用程序的结果。

JRE也是JDK的一个子系统,它提供运行时工具,如jvm、类、可执行文件(如.jar文件等)。

JDK是Java开发工具包,它包含了在类、方法、Swing、AWT、包、Java(解释器)、JavaC(编译器)、applet查看器(applet应用查看器)等编程中所需的所有组件。因此,最终的结论是,在开发应用程序时,每一个文件都是独立的或基于Web的。


清楚地理解这些术语(JVM、JDK、JRE)对于理解它们的用法和区别是至关重要的。

JVMJava虚拟机(JVM)是运行Java字节码的运行时系统。JVM就像一台虚拟计算机,可以执行一组编译的指令并操作内存位置。当Java编译器编译源代码时,它会在.class文件中生成一个名为字节码的高度优化的指令集。JVM解释这些字节码指令,并将它们转换为特定于机器的代码以供执行。

JDKJava开发工具包(JDK)是一个可以用来开发和执行Java应用程序的软件开发环境。它包括JRE和一组编程工具,例如Java编译器、解释器、Apple TeVIEW和文档查看器。JDK是通过JavaSE、JavaEE或Java ME平台实现的。

JREJava运行时环境(JRE)是JDK的一部分,JVM包括JVM、核心类和支持应用程序开发的多个库。虽然JRE作为JDK的一部分提供,但是您也可以单独下载和使用它。

为了完全理解,您可以看到我的博客:jdk jre jvm和differences


如果你是Java程序员,你的系统中需要JDK,这个包也包括JRE和JVM,但是如果你是一个喜欢玩网络游戏的普通用户,那么你只需要JRE,这个包就不会有JDK了。

JVM

JVM (Java Virtual Machine) is an abstract machine. It is a
specification that provides runtime environment in which java bytecode
can be executed.

JVMs are available for many hardware and software platforms. JVM, JRE
and JDK are platform dependent because configuration of each OS
differs. But, Java is platform independent.

JRE

It contains everything you need to run Java applications in compiled
form. You don't need any libraries and other stuffs. All things you
need are compiled.

JRE is can not used for development, only used for run the
applications.

Java SE Development Kit (JDK)

The JDK includes the JRE plus command-line development tools such as
compilers and debuggers that are necessary or useful for developing
applets and applications.

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


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

JRE是Java运行时环境的缩写。它用于提供运行时环境。它是JVM的实现。它是物理存在的。它包含一组库+ JVM在运行时使用的其他文件。

JDK是Java开发工具包的缩写。它物理上存在。它包含JRe+开发工具。


JDK包括JRE plus命令行开发工具,如编译器和调试器,这些工具对于开发小程序和应用程序是必要的或有用的。

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

JDK是一个抽象的机器。它是一种规范,它提供运行时环境,其中可以执行Java字节码。

所以,基本上jvm


简单地说:

JVM是执行Java代码的虚拟机。

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

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


JDK是编译代码和将Java代码转换为字节代码所必需的,而JRE是执行字节代码所必需的。


JDK和JRE之间的区别在于JDK是Java的软件开发工具包,而JRE是运行程序的地方。


假设您是开发人员,那么您的角色是开发程序以及执行程序。所以您必须有开发和执行的环境,这是由JDK提供的。

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

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

jdk=jre+开发工具

jre=jvm+库类


JRE

JRE是Java运行时环境的缩写。它用于提供运行时环境。它是JVM的实现。它在物理上存在。它包含一组库以及运行时JVM使用的其他文件。

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

enter image description here

JDK

JDK是Java开发工具包的缩写。它物理上存在。它包含JRe+开发工具。

enter image description here