1. 从三种认知角度重识JVM
1. JVM概述(一)
- JVM:Java Virtual Machine,也就是Java虚拟机
- 虚拟机是什么?通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的计算机系统
- JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境
2. JVM概述(二)

这张图描述了Java程序是如何运行在操作系统上的
首先,Java编译器会将源代码编译成.class文件,这需要遵循JVM规范;然后,ClassLoader也就是类装载器会将.class文件装载到JVM中。在运行期,JVM要做内存分配,通过字节码执行引擎执行代码,垃圾回收等工作,如果涉及到并发处理,JVM还要做高效的并发处理工作。
3. JVM主要功能
- 通过ClassLoader寻找和装载class文件
- 解释字节码成为指令并执行,提供class文件的运行环境
- 进行运行期间的内存分配和垃圾回收
- 提供与硬件交互的平台
4. 虚拟机是Java平台无关的保障

2. JVM规范作用及其核心
- JVM规范的作用
- Java虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范
- 该规范使Java软件独立于平台,因为编译时针对作为虚拟机的“一般机器”而做
- 这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件来实现
- JVM规范定义的主要内容
- 字节码指令集(相当于中央处理器CPU)
- Class文件的格式
- 数据类型和值
- 运行时数据区
- 栈帧
- 特殊方法
- 类库
- 异常
- 虚拟机的启动,加载,链接和初始化
3. 理解JVM规范中的虚拟机结构
- 字节码指令集(相当于中央处理器CPU)
- Class文件的格式
- 数据类型和值
- 运行时数据区
- 栈帧
- 特殊方法
<init>:实例初始化方法,通过JVM的invokespecial指令来调用<clint>:类或接口的初始化方法,不包含参数,返回void
- 类库
- Java虚拟机必须要对一些Java类库提供支持,否则这些类库根本无法实现,比如下面这些:
- 反射
- 加载和创建类或接口,如
ClassLoader - 连接和初始化和接口的类
- 安全,如
security - 多线程
- 弱引用
- Java虚拟机必须要对一些Java类库提供支持,否则这些类库根本无法实现,比如下面这些:
- 异常
- 虚拟机的启动,加载,链接和初始化
4. Class字节码解析:理解ClassFile结构
概览:
- Class文件格式
- 阅读class字节码文件
- 阅读“虚拟机汇编语言“表示的Java类
Class文件格式概述
- Class文件是JVM的输入,Java虚拟机规范中定义了Class文件的结构。Class文件是JVM实现平台无关,技术无关的基础
- Class文件是一组以8字节为单位的字节流,各个数据项目按序紧凑排列
- 对于占用空间大于8字节的数据项,按照高位在前的方式分割成多个8字节进行存储
- Class文件格式里只有两种类型:无符号数,表
- 无符号数:基本数据类型,以u1,u2,u4,u8来代表几个字节的无符号数
- 表:由多个无符号数和其他表构成的复合数据类型,通常以”_info”结尾
Class文件格式:
- javap工具生成非正式的“虚拟机汇编语言”格式如下:
<index><opcode>[<operand1>[<operand2>...]][<comment>] <index>是指令操作码在数组中的下标,该数组以字节形式来存储当前方法的Java虚拟机代码;也可以是相对于方法起始处的字节偏移量<opcode>是指令的助记码,<oprand>是操作数,<comment>是行尾的注释
