Android Java 虚拟机
1. 概述
1.1 Java 虚拟机家族
1.1.1 HotSpot VM
Oracle JDK 和 OpenJDK 中自带的虚拟机,最主流和使用范围最广的 Java 虚拟机。
1.1.2 J9 VM
1.1.3 Zing VM
1.2 Java 虚拟机执行流程
当执行一个 Java 程序时,它的执行流程图如下:
- 编译时环境
- 运行时环境
2. Java 虚拟机结构
2.1 Class 文件格式
Class 文件格式:
2.2 类的生命周期
2.3 类加载系统
- Bootstrap ClassLoader(引导类加载器)
- Extensions ClassLoader(拓展类加载器)
- Application ClassLoader(应用程序类加载器)/ System ClassLoader(系统类加载器)
2.4 运行时数据区域
这些数据区域分别为程序计数器、Java 虚拟机栈、本地方法栈、Java 堆和方法区。
2.4.1 程序计数器
2.4.2 Java 虚拟机栈
2.4.3 本地方法栈
2.4.4 Java 堆
2.4.5 方法区
2.4.6 运行时常量池
3. 对象的创建
当虚拟机接收到一个 new 指令时,它会做如下的操作:
4. 对象的堆内存布局
5. oop-klass 模型
6. 垃圾标记算法
6.1 Java 中的引用
- 强引用
- 软引用
- 弱引用
- 虚引用
6.2 引用计数法
缺点:引用计数算法没有解决对象之间相互循环引用的问题。
6.3 根搜索算法
优点:解决了已经死亡的对象因为相互引用而不能被回收。