您的位置:

JVM、JRE、JDK之间的关系

一、JVM是什么?

JVM, 即Java Virtual Machine,是Java编程语言的核心,并且被实现为一个运行于实际机器和操作系统之上的虚拟计算机。它负责执行Java字节码并管理Java程序的运行时环境,使Java程序可以在不同的平台上编写一次、运行多次。

JVM的工作原理

当需要运行Java程序的时候,首先需要将Java源文件编译为Java字节码,并存储在.class文件中。这些字节码是可被JVM解释和执行的代码。

       +----------+               +----------------+  
       |  Java源文件  |  --编译--> |  Java字节码文件  |   
       +----------+               +----------------+  
                                             ↕  
                                             ↕  
                                       +-----------+  
                                       |    JVM    |  
                                       +-----------+  
                                             ↓  
                                             ↓  
                                     +------------+  
                                     |  机器指令  |  
                                     +------------+  

JVM会进行类的加载、解释字节码、执行代码等操作,然后将其转换为机器指令去执行,这个过程就是所谓的Java程序的运行过程。JVM屏蔽了不同操作系统和硬件之间的差异性,并且以实现“一次编写,到处运行”的优点而得到广泛的应用。

JVM的特点

Java虚拟机的特点主要包括:

  • 跨平台性。JVM通过将Java程序编译为字节码,然后由JVM去解释执行,从而实现跨平台执行Java程序的特点。
  • 动态性。JVM可以在运行时查找需要的类、扩展库和方法,从而支持程序的动态加载和更新,提高程序的灵活性和可维护性。
  • 自动内存管理。JVM提供了一个垃圾回收器,自动管理Java程序中的内存,从而使程序员不需要关注内存分配和回收的细节问题,更加关注于程序的业务实现。

二、JRE是什么?

JRE, 即Java Runtime Environment,是Java应用程序的运行时环境。它包含了Java类库、Java虚拟机和其他支持文件,并且提供了一个运行Java程序所需的环境。

JRE的组成部分

JRE通过包含以下组件为Java程序的执行提供环境支持:

  • JVM:实现Java程序的跨平台执行。
  • Java类库:提供了Java程序开发中常用的类和接口,如字符串、集合、IO等。
  • Java插件:用于让浏览器支持Java applet,并且提供浏览器与JVM之间的接口。
  • JRE自带的开发工具:其中包括Java API文档、Java语言解释器、Java编译器、Java调试器等。

三、JDK是什么?

JDK, 即Java Development Kit,是Java开发工具包。它是编写Java程序所必需的软件开发工具套件。JDK包含了JRE、编译器(javac)和其他Java开发工具。JDK可以在不同的操作系统上编译、开发和运行Java程序。

JDK组成部分

JDK包含了以下组件:

  • JRE:提供了Java程序运行时所需的环境支持。
  • 编译器(javac):将Java源码编译为Java字节码的编译器。
  • 调试器(jdb):用于Java程序的调试。
  • 示例代码:包含了许多Java程序示例代码,可以供开发人员参考和学习。
  • JRE自带的开发工具:其中包括Java API文档、Java语言解释器、Java编译器、Java调试器等。

四、JVM、JRE、JDK之间的关系

JVM、JRE、JDK之间的关系如下图所示:

                         +--------+    
                         |  JDK   |    
                         +--------+    
                              ↓        
                         +--------+    
                         |  JRE   |    
                         +--------+    
                              ↓        
                    +--------------+  
                    |     JVM      |  
                    +--------------+  

可以看到,JDK是在JRE之上开发出来的小组件,JRE是Java程序的运行时环境,JVM是Java程序的核心执行引擎。三者之间的关系为:

  • JVM是JDK和JRE的核心。
  • JRE是JDK和Java应用程序的组成部分。
  • JDK包含了运行Java程序所需的JRE,也包含了编写和调试Java程序所需的开发工具。

五、示例代码

输出JVM的版本信息:

public class JVM {
    public static void main(String[] args) {
        String jvmversion = System.getProperty("java.version");
        String jvmvendor = System.getProperty("java.vendor");
        System.out.println("JVM Version: " + jvmversion + "\nJVM Vendor: " + jvmvendor);
    }
}

输出JRE的版本信息:

public class JRE {
    public static void main(String[] args) {
        String jreversion = System.getProperty("java.runtime.version");
        String jrevendor = System.getProperty("java.vendor");
        System.out.println("JRE Version: " + jreversion + "\nJRE Vendor: " + jrevendor);
    }
}

输出JDK的版本信息:

public class JDK {
    public static void main(String[] args) {
        String jdkversion = System.getProperty("java.version");
        String jdkvendor = System.getProperty("java.vendor");
        System.out.println("JDK Version: " + jdkversion + "\nJDK Vendor: " + jdkvendor);
    }
}