Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDK和JRE之间的区别是什么?_Java - Fatal编程技术网

Java JDK和JRE之间的区别是什么?

Java JDK和JRE之间的区别是什么?,java,Java,JDK和JRE之间的区别是什么 他们的角色是什么?我什么时候应该使用其中一个?JRE是Java运行时环境。它是运行已编译Java程序所需的一切的包,包括Java虚拟机(JVM)、Java类库、Java命令和其他基础设施。但是,它不能用于创建新程序 JDK是Java开发工具包,一种功能齐全的Java SDK。它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序 通常,如果您只关心在计算机上运行Java程序,您将只安装JRE。这就是你所需要的。另

JDK和JRE之间的区别是什么


他们的角色是什么?我什么时候应该使用其中一个?

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

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

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

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

上面的答案(巴勃罗的)非常正确。这只是补充信息


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

  • bin/
    包含Java的可执行程序。最重要的是
    java
    (对于Windows,
    javaw
    ),它启动了JVM。这里还有一些其他实用程序,例如
    keytool
    policytool
  • conf/
    保存用户可编辑的配置文件,供Java专家使用
  • lib/
    有大量的支持文件:一些
    .jar
    s、配置文件、属性文件、字体、翻译、证书等,这些都是Java的“装饰”。最重要的是
    modules
    ,它包含Java标准库的
    .class
    文件
  • 在某种程度上,Java标准库需要调用本机代码。为此,JRE在
    bin/
    lib/
    下包含一些
    .dll
    (Windows)或
    .dylib
    (macOS)或
    .so
    (Linux)文件,并支持特定于系统的本机二进制代码
JDK也是一组目录。它是JRE的超集,并添加了一些内容:

  • bin/
    已通过开发工具进行了扩展。其中最重要的是
    javac
    ;其他包括
    jar
    javadoc
    jshell
  • jmods/
    ,用于保存标准库的JMOD文件。这些文件允许标准库与
    jlink
    一起使用

    • 来自java官方网站

      JRE(Java运行时环境):

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

      • 它是一个软件包,可用于开发基于Java的应用程序
      • 开发Java应用程序需要Java开发工具包
      • JDK需要更多的磁盘空间,因为它包含JRE以及各种开发工具
      • JDK可以从以下站点免费下载/支持:
      • 它包括JRE、一组API类、Java编译器、Webstart以及编写Java小程序和应用程序所需的其他文件

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

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

      什么是调试信息?下面是一个简短的解释:

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

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

      调试信息由编译器与机器代码一起生成。它表示可执行程序和原始源代码之间的关系。该信息编码为预定义格式,并与机器代码一起存储。多年来,许多这样的格式都是为不同的目的而发明的