初学Java,要对JDK、JRE、JVM层次上有一个初级概念的理解,不能提起来毫无概念啊,造成靓仔语塞的车祸现场。

何为JDK、JRE、JVM

首先从英文名称上来理解一哈:

JDK(Java development Kit):Java开发工具包。JDK是整个Java开发的核心,是用于开发Java应用程序的软件开发工具。包括了Java运行时环境(JRE)、解释器(java.exe)、编译器(javac.exe)、Java归档(jar包——一种软件包文件格式)、文档生成器(javac.exe)等工具和Java基础类库。

JRE(Java Runtime Environment):Java运行时环境。运行Java程序所必须的环境的集合,包括了JVM标准实现及Java基本类库。相对于JVM来说,多出来的是一部分Java类库。

JVM(Java Virtual Machine):Java虚拟机。整个Java实现跨平台的最核心部分,能够运行Java语言编写的软件程序;它只认识.class为后缀类型的文件,能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。

JVM有三层含义:

  • JVM规范要求
  • 满足JVM规范要求的一种具体实现(一种计算机程序)
  • 一个JVM实例,在命令提示符下编写Java命令以运行Java类时,都会创建一个JVM实例。

三者关系

一层层的嵌套关系:JDK>JRE>JVM

jre直接运行java程序 java jre_JVM

jre直接运行java程序 java jre_JRE_02

JDK = JRE + 开发工具(IDEA、Eclipe等IDE(Integrated Development Environment:集成开发环境))

JRE = JVM + 类库

jre直接运行java程序 java jre_JRE_03

jre直接运行java程序 java jre_JRE_02

JDK与JRE交互过程

  • JDK中的编译器(javac.exe)对代码进行编译——存储在.java文件中的源代码被编译成字节码存储在.class文件中。
  • 此过程发生在JRE中。

JVM工作方式

Java程序运行时JVM是JRE的一个实例。它执行的是.class文件,它会将字节码翻译为平台可以执行的机器码。

Java程序开发过程

  • 使用JDK(调用Java API)编写Java源代码,存储于.java文件中。
  • JDK中的编译器javac.exe将Java源代码编译成为字节码,存储在.class文件中。
  • JRE加载、验证、执行Java字节码。
  • JVM将字节码解释为机器码并映射到CPU指令集或OS(操作系统)的系统调用。