1.3.3 JVM、JRE与JDK的区别
既然JVM贵为Java程序的运行环境,为什么之前安装的是JDK而非JVM呢?这是因为JVM仅仅定义了一套运行规范,并未指明只有Java程序才能运行于JVM。相反,如果其他编程语言遵循JVM的运行规范,那么同样能够运行于JVM。除了Java语言外,还有Kotlin、Scala、Clojure、Groovy等编程语言支持JVM,它们的代码也能由JVM编译运行。
不过由于JVM只定义了一套规范,本身没有包含更具体的实现类库,因此真正的Java运行环境是更上一层的JRE(Java Runtime Environment,即Java运行环境)。JRE是运行Java程序所必需的环境集合,它包含JVM的标准实现和Java的核心类库。
虽然有了JRE就能实时地运行Java程序,但是对开发人员来说远远不够,因为开发者还需要编译、排错、打包、数据分析、性能优化等功能支持,所以最终提供给开发者下载的是JDK(Java Development Kit,Java开发工具包)。JDK不但包含JRE的所有内容,而且附加了一些实用小工具,例如javac.exe、java.exe、jar.exe等。
综上所述,JVM、JRE与JDK三者之间的包含关系为JDK>JRE>JVM。
如果读者安装的JDK是Java 8,在JDK的安装目录下就会看到有一个名叫jre的子目录,这是JRE程序包所在,同时说明JDK已经将JRE包括在内。如果读者安装的JDK是Java 11,在JDK的安装目录下就看不到jre子目录,这是因为以前的JDK设立jre目录是为了方便独立更新JRE,而从Java 11开始不再单设jre了。如果开发者确实需要单独的JRE,那么可使用命令行进入JDK的安装目录,然后执行以下命令:
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
命令执行完毕,即可在JDK安装目录下看到多了一个jre子目录。