本文介绍: JVM,也就是Java虚拟机所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。即:虚拟机是一个计算机系统。这种计算机系统运行在完全隔离的环境中,且它的硬件系统功能是通过软件模拟出来的。JVM通过软件来模拟Java字节码的指令集,是Java程序的运行环境。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码opcode)以及跟随其后的0至多个代表此操作所需参数的操作数operand)所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。
1. JVM
概述
JVM
:Java Virtual Machine
,也就是 Java
虚拟机
JVM
通过软件来模拟 Java
字节码的指令集,是 Java
程序的运行环境。
1.1 JVM
的主要功能
JVM
的主要功能包括:
1.2 虚拟机是 Java
平台无关的保障
Java
程序只跟 Java
虚拟机相关,跟平台无关。
2. JVM
规范的作用
Java
虚拟机规范为不同的硬件平台提供了一种编译 Java
技术代码的规范。
JVM
规范使 Java
软件独立于平台,因为编译是针对作为虚拟机的 “一般机器” 而做。
3. JVM
规范文档的下载获取
4. JVM
规范中的主要内容
4.1 字节码指令集
4.2 Class
文件的格式
4.3 数据类型和值
4.4 运行时数据区
4.5 栈帧
4.6 特殊方法
4.7 类库
4.8 异常
4.9 虚拟机的启动、加载、链接和初始化
5. 字节码指令集
5.1 字节码指令集简介
5.2 数据类型与指令集
5.3 加载和存储指令
5.4 算术指令
5.5 类型转换指令
5.6 对象的创建与操作指令
5.7 操作数栈管理指令
5.8 控制转移指令
5.9 方法调用和返回指令
5.10 抛出异常相关的指令
5.11 同步相关的指令
5.12 指令格式表(描述指令的功能,使用方式等)
如何阅读指令格式表
5.13 如何用字节码指令集表示 Java
代码
6. 特殊方法
6.1 <init>
6.2 <clinit>
7. 类库
8. Class
文件的格式
8.1 Class
文件概述
8.2 Class
文件中的两种类型(无符号数、表)
8.3 ClassFile
结构
8.4 查看 Java
源码对应的 Class
字节码文件的三种方式
8.4.1 在 Eclipse
中查看 class
文件
8.4.2 通过 javap
命令查看 class
文件
javap
生成的非正式 “虚拟机汇编语言” 的格式:
8.4.3 通过 16
进制文件查看工具(如 winhex
)查看 class
文件
8.5 常量池
8.5.1 常量池项在 class
文件中的通用格式
8.5.2 常量池项的类型(tag
)
8.5.2.1 CONSTANT_Class_info
类型
8.5.2.2 CONSTANT_Fieldref_info
类型
8.5.2.3 CONSTANT_Methodref_info
类型
8.5.2.4 CONSTANT_InterfaceMethodref_info
类型
8.5.2.5 CONSTANT_String_info
类型
8.5.2.6 CONSTANT_Integer_info
类型
8.5.2.7 CONSTANT_Float_info
类型
8.5.2.8 CONSTANT_Long_info
类型
8.5.2.9 CONSTANT_Double_info
类型
8.5.2.10 CONSTANT_NameAndType_info
类型
8.5.2.11 CONSTANT_Utf8_info
类型
8.5.2.12 CONSTANT_MethodHandle_info
类型
8.5.2.13 CONSTANT_MethodType_info
类型
8.5.2.14 CONSTANT_InvokeDynamic_info
类型
8.5.3 如何确定 class
文件中常量池的结束位置
8.6 access_flags
(访问权限标志)
8.7 this_class
、super_class
、interfaces
8.8 字段(成员变量)
8.8.1 字段在 class
文件中的格式
字段描述符
8.8.2 字段的访问权限和基本属性的标志
8.8.3 字段在 class
文件中的解析举例
8.9 方法(成员方法)
8.9.1 方法在 class
文件中的格式
方法描述符
8.9.2 方法在 class
文件中的解析举例
8.10 属性(attribute
)
8.10.1 属性在 class
文件中的通用格式
8.10.2 JVM
规范中预定义的属性(23
个)
8.10.3 Code
属性
8.10.3.1 Code
属性的格式
8.10.3.2 LineNumberTable
8.10.3.3 LocalVariableTable
8.10.3.4 LocalVariableTypeTable
8.10.3.5 StackMapTable
8.10.3.6 RuntimeVisibleTypeAnnotations
和 RuntimeInvisisbleTypeAnnotations
8.10.3.7 栈帧
8.10.3.8 局部变量表(local variable
又称本地变量表)
8.10.3.9 Code
属性在 class
文件中的解析举例(Slot
可复用)
9. ASM
开发
9.1 编程模型和核心 API
9.2 ClassVisitor
开发
9.3 MethodVisitor
开发
9.4 实现模拟 AOP
功能
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。