深入 Java 虚拟机.pdf
Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。
一、Java 虚拟机的概念
Java 虚拟机可以是抽象的规范、具体的实现或运行的实例。抽象的 Java 虚拟机规范定义了 Java 虚拟机的行为和约束,具体的实现则是根据规范来实现的。不同的实现可以有不同的内部结构和外部行为。
二、Java 虚拟机的生命周期
一个运行中的 Java 虚拟机的生命周期是从程序开始执行到程序结束。Java 虚拟机总是从 main() 方法开始执行,main() 方法是程序的起点。Java 虚拟机中有两种类型的线程:守护线程(daemon)和普通线程(non-daemon)。守护线程是 Java 虚拟机自己使用的线程,例如垃圾收集线程。普通线程是用户程序创建的线程。
三、Java 虚拟机的体系结构
Java 虚拟机的体系结构由多个子系统组成,包括类加载器子系统、执行引擎、数据区等。类加载器子系统负责加载程序中的类型(类和接口),并赋予唯一的名字。执行引擎负责执行被加载类中包含的指令。数据区中保存了程序执行所需的信息,如字节码、被加载类的其他额外信息、程序中的对象、方法的参数、返回值、本地变量、处理的中间变量等。
四、Java 虚拟机的内存结构
Java 虚拟机的内存结构包括方法区(method area)和堆(heap)。方法区保存了从类文件中解析出来的信息。堆保存了程序执行时创建的对象。每一个线程都有自己的 PC 寄存器(程序计数器)和 Java 堆栈(Java stack)。PC 寄存器保存线程执行的下一条指令。Java 堆栈保存了一个线程调用方法时的状态,包括本地变量、调用方法的参数、返回值、处理的中间变量。
五、Java 虚拟机的方法区
方法区保存了从类文件中解析出来的信息,包括类型信息、字段信息、方法信息等。类型信息包括类型的全名、类型的父类型的全名、类型是否是类或接口等。字段信息包括字段的名称、字段的类型、字段的访问权限等。方法信息包括方法的名称、方法的返回类型、方法的参数列表等。
六、Java 虚拟机的垃圾收集
Java 虚拟机的垃圾收集是指在 Java 虚拟机中自动地回收不再使用的对象,以释放内存空间。垃圾收集可以是周期性的,也可以是根据需要进行的。Java 虚拟机提供了多种垃圾收集算法,如标记-清除算法、复制算法、标记-压缩算法等。
七、Java 虚拟机的优点
Java 虚拟机提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。Java 虚拟机也提供了自动内存管理、垃圾收集、多线程支持等功能,提高了 Java 程序的可靠性和性能。