JVM是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。各种语言可以共享JVM带来的跨平台性,此外JVM还包含可以做到自动垃圾回收的优秀垃圾回收器以及可靠的即时编译器,这些都是JVM平台的优点。

JVM就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数、怎么处理操作数、处理结果放在哪里,等等。

JVM是运行在操作系统之上的,它与硬件没有直接的交互,如图1-7所示。

image.png

图1-7 JVM运行在操作系统之上

HotSpot VM是目前市面上高性能虚拟机的代表作之一,它采用解释器与即时编译器并存的架构。在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步。首先看一下JVM的整体结构图,如图1-8所示。

image.png

图1-8 HotSpot VM整体结构图

该架构可以分成三层:

最上层:类装载器子系统。javac 编译器将编译好的字节码文件,通过 Java 类装载执行机制,把对象或字节码文件存放在 JVM 内存划分区域

中间层:运行时数据区(Runtime Data Area)。主要是在Java代码运行时用于存放数据的区域,包括方法区、堆、Java栈、程序计数器、本地方法栈。

最下层:执行引擎层。执行引擎包含解释器、JIT(Just In Time)编译器和垃圾回收器(Garbage Collection,GC),在后续章节会进行详细的介绍。