vlambda博客
学习文章列表

什么是JRE、JDK、JVM以及三者之间的关系?

阅读本文大概需要4分钟

Windows下,双击jdk-8u161-windows-x64.exe,安装后在Java文件夹下有如下两个文件:

JRE

JRE stands for “Java Runtime Environment” and may also be written as “Java RTE.” The Java Runtime Environment provides the minimum requirements for executing a Java application; it consists of the Java Virtual Machine (JVM), core classes, and supporting files.

还是看英文原版的解释的比较清晰。
JRE表示Java运行环境,也就是包含执行Java程序最基本的条件。它由JVM和一些核心类库组成。

使用场景:JRE一般是给想要运行Java程序的人员使用。

JDK

The Java Development Kit (JDK) is a software development environment used for developing Java applications and applets. It includes the Java Runtime Environment (JRE), an interpreter/loader (Java), a compiler (javac), an archiver (jar), a documentation generator (Javadoc) and other tools needed in Java development.

JDK是一个用来开发Java Application和Applets的开发环境。它包含了JRE、解释器、编译器、打包工具、文档生成器等。

使用场景:JDK一般是给开发人员使用。

JVM

  1. A specification where working of Java Virtual Machine is specified. But implementation provider is independent to choose the algorithm. Its implementation has been provided by Sun and other companies.

  2. An implementation is a computer program that meets the requirements of the JVM specification

  3. Runtime Instance Whenever you write java command on the command prompt to run the java class, an instance of JVM is created.

JVM,Java Virtual Machine的简称,简单来说就是用来执行字节码的,它并不认识Java代码,它将字节码翻译成对应平台的机器指令,再由对应的平台执行机器指令。这也就是我们所说的写一次Java代码,能够在各种平台上运行:WORA(Write Once Run Anywhere)。所以每个平台需要有一个对应的JVM。

另外JVM本身也是一种规范(specification),不同厂商可以有不同的实现。目前比较出名的JVM是Oracle的HotSpot,它就是JVM规范的一种实现。

最后说到编程语言,不管是用Java还是其它的什么语言,只要编译器生成的字节码能够符合JVM规范,JVM能够读懂就行。简单理解这样的编程就是面向JVM规范编程, JVM成为了一个能容纳其它语言运行的平台,如Scala、Kotlin、Groovy、Clojure等。

下一篇文章会详细介绍JVM。

使用场景:不管是用JRE还是JDK,最后都要用到JVM,因为JVM会一行一行地解释代码(字节码),因此JVM也可以认为是一个解释器。

三者关系

什么是JRE、JDK、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.

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

再来个详细的图:
什么是JRE、JDK、JVM以及三者之间的关系?

运行关系图

Runtime是指JRE执行环节;
Compile是指JDK中的编译环节;

什么是JRE、JDK、JVM以及三者之间的关系?
运行Java应用时,三者的关系图:

国民程序员