开始介绍类加载器和双亲委派模型之前,简单回顾一下类加载过程。
- 类加载过程:加载->连接->初始化。
- 连接过程又可分为三步:验证->准备->解析。
加载是类加载过程的第一步,主要完成下面 3 件事情:
- 通过全类名获取定义此类的二进制字节流
- 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
开始介绍类加载器和双亲委派模型之前,简单回顾一下类加载过程。
加载是类加载过程的第一步,主要完成下面 3 件事情:
引用计数法:
给对象添加一个引用计数器,每一个地方引用它时计数器加1;引用失效时计数器减1.为值为0的对象不可能再被使用.
缺点:
难以解决对象之间循环引用的问题(对象A引用对象B,对象B引用对象A,两个对象无实际意义)
可达性分析算法:
通过一些称为”GC_ROOTS”的对象作为起点,开始向下搜索引用它的对象,这个过程走过的路径即”引用链”.当一个对象到”GC_ROOTS”没有任何引用链相连,证明此对象不存活.
类从加载到虚拟机内存~卸载出内存的生命周期(这些阶段通常是交叉混合进行的):
加载 –> 验证 –> 准备 –> 解析 –> 初始化 –> 使用 –> 卸载
主动引用
五种必须立即对类进行初始化
的情况: