1. JVM概述

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

2. 主流虚拟机概述

  • HotSpot

Oracle/Sun JDK和OpenJDK都使用HotSPot VM的相同核心。

  • J9

J9是IBM开发的高度模块化的JVM。

  • JRockit

JRockit 与 HotSpot 同属于 Oracle,目前为止 Oracle 一直在推进HotSpot 与 JRockit 两款各有优势的虚拟机进行融合互补。

  • Zing

由Azul Systems根据HostPot为基础改进的高性能低延迟的JVM Dalvik — Android上的Dalvik 虽然名字不叫JVM,但骨子里就是不折不扣的JVM。

3. JVM与操作系统关系

Java 是一门抽象程度特别高的语言,提供了自动内存管理等一系列的特性。这些特性直接在操作系统上实现是不太可能的,所以就需要 JVM 进行一番转换。JVM上承开发语言,下接操作系统,它的中间接口就是字节码。
image.png

4. JVM、JRE、JDK 的关系

  • JVM 是 Java 程序能够运行的核心。
  • JRE 是 JVM 标准加上实现的一大堆基础类库,就组成了 Java 的运行时环境。
  • JDK 除了 JRE,JDK 还提供了一些非常好用的小工具,比如 javac、java、jar 等。

image.png

5. Java虚拟机规范与Java语言规范关系

image.png
左半部分是 Java 虚拟机规范,其实就是为输入和执行字节码提供一个运行环境。右半部分是我们常说的 Java 语法 规范,比如 switch、for、泛型、lambda 等相关的程序,最终都会编译成字节码。而连接左右两部分的桥梁依然是 Java 的字节码。

6. Java程序执行过程

  1. Java程序将 .java文件编译成 .class 字节码
  2. Java类加载器加载 .class 文件到内存中
  3. 执行引擎把字节码转换成二进制机器码执行程序

image.png

7. JVM架构图

JVM分为五大模块: 类装载器子系统运行时数据区 执行引擎本地方法接口垃圾收集模块
JVM架构图.svg