我对JDK,JRE和JVM的理解

时间:2014-02-20 16:55:21

标签: java jvm

经过深入分析,这是我对JDK,JRE和JVM的理解。 如果我错了,请纠正我......

  1. JVM是JRE的子集,JRE是JDK的子集。
  2. JVM用于通过使用JRE将字节代码(* .class)转换为目标代码(机器代码)。
  3. JRE有操作系统(OS)指定DLL,JVM使用它来进行对象代码转换。
  4. 如果明天假设任何新操作系统将启动,那么当前可用的JRE可能不支持JVM用于字节代码到机器代码转换。因此,JRE可能需要加强对即将推出的新操作系统的支持。
  5. 从上面我的分析我得出的结论就像JVM对所有操作系统都是通用的,但是JRE有特定于操作系统的DLL,JVM会在字节代码中使用它来进行目标代码转换。

5 个答案:

答案 0 :(得分:5)

你几乎就在那里。我只是建议如下:

  

JVM是JRE的子集,JRE是JDK的子集。

这很公平。 JVM(Java Virtual Machinve)包含在JRE(Java运行时环境)中以运行字节码(.class文件)。如果您下载整个JDK(Java开发工具包),其中还包括编译器等开发工具,则包含JRE。

  

JVM用于通过使用JRE将字节代码(* .class)转换为目标代码(机器代码)。

基本上,是的。 JVM执行字节码,此过程的一部分涉及将其转换为机器代码。您需要一个JDK来将.java文件(源代码)编译成.class文件(字节码),以便它可以在JVM上执行。

  

JRE有操作系统(OS)指定DLL,JVM使用它来进行对象代码转换。

JVM在执行字节代码时,有一个JIT(即时)编译器,可将与平台无关的字节代码转换为特定于平台的机器代码。在Windows中,这将包含在DLL中,是的。 JRE中还包括本机方法的特定于操作系统的实现,例如java.lang.Object中声明的那些。

  

如果明天假设任何新操作系统将启动,则当前可用的JRE可能不支持JVM以获取字节代码以进行机器代码转换。因此,JRE可能需要加强对即将推出的新操作系统的支持。

是的,如果它是一个全新的操作系统,则需要JVM的本机实现。但是,您可以在这个新操作系统上编译OpenJDK。

  

所以从上面我的分析我得出的结论就像JVM对于所有操作系统都是通用的,但是JRE有特定于操作系统的DLL,在字节代码到目标代码转换期间,JVM将使用它。

我不会说JVM对所有操作系统都是通用的,而不是每个主流操作系统都有JRE(因此也就是JVM)实现。这些操作系统原生的JVM将在执行与操作系统无关的Java字节代码时使用特定于操作系统的库。

答案 1 :(得分:4)

JVM是虚拟的,您可以将其视为机器代码为Java字节码的虚拟计算机。它不是真正的计算机,而是可以执行Java字节码指令的虚拟计算机。

JRE是JVM实现。该实现是特定于操作系统的(当然),但它提供独立于操作系统的外部接口(意味着您可以在Windows JRE和Linux JRE上运行相同的Java代码)。从90年代后期开始,这就是“一次编写一次运行”的事情。

JDK是编写Java代码所需的编译器,JRE,其他工具和所有Java API。

我不想将Android及其Dalvik VM添加到图片中(虽然我可以画出一些有趣的相似之处),因为我会更加困惑你。

答案 2 :(得分:2)

让我们描述一下:

JVM :Java虚拟机。这基本上是一个应用程序,一个特定于操作系统的二进制文件。这个二进制文件读取.class文件并解释字节码或将其编译为机器代码并执行它。

Java API :这是程序员可以使用的很多代码。基本功能,如HashSets,List等。这些代码中的一些可能是特定于操作系统的,例如java.lang.Math中。其中大多数是独立的并保存为字节码

JRE :Java Runtime Environment是JVM,Java API和一些实用程序的捆绑包。完整的捆绑包是特定于操作系统的。它面向想要运行Java应用程序的人

JDK :Java Development Kit是一个JRE加上编译器(源代码到字节码)和开发Java应用程序所需的工具

  1. 不,这一切都是由JVM首先完成的
  2. 不,JVM和JRE包含特定于操作系统的部分
  3. 没有
  4. 如果您正在谈论JRE / JDK,则不应将其与JVM放在同一级别。

答案 3 :(得分:1)

http://docs.oracle.com/javase/7/docs/technotes/guides/index.html#jre-jdk

  

JRE和JDK Oracle提供了两个主要的软件产品   Java™平台,标准版(Java™SE)系列:

     

Java SE运行时环境(JRE)

     

JRE 提供库,Java虚拟机等   运行applet和应用程序所需的组件   在Java编程语言中。这个运行时环境可以   通过申请重新分配,使他们独立。

     

Java SE开发工具包(JDK)

     

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

     

Java虚拟机

     

Java虚拟机是一个抽象计算机器,具有   指令集并在运行时操作内存。 Java虚拟   机器被移植到不同的平台以提供硬件和   操作系统独立性。

通常,JVM和JVM的实现可以互换使用。当所有各方都理解这一事实时,这是可以接受的。

答案 4 :(得分:0)

JVM 是由 bin 下的 java.exe javaw.exe 启动的进程 JRE 的文件夹。 JRE 是启动java进程所需的二进制包。 JRE 不仅是特定于操作系统的,还是特定于体系结构的。