Class 加载链接、初始化、实例化

4 阅读1分钟

本文主要描述了Dalvik虚拟机中 Class 从加载到实例化过程。文中不贴代码,因为代码处理有些繁琐。将代码的操作过程全部抽象成图,理解起来更加直观。

详细全文内容

dalvik虚拟机类加载流程可分为2个大过程:

  1. 构造DexFile对象表示一个加载并且解析后的Dex文件;
  2. 构造ClassObject对象表示虚拟机成功加载的类。

在实例化或引用引用类的静态成员,都有时机触发ClassLoad去加载尚未加载的类:

  1. 父类,接口在加载阶段会递归加载;
  2. 若该类还没verify,则 类的“方法参数”、“方法体中”、“返回值” 引用到的类都会在当前类初始化阶段加载(实例变量在构造方法中、静态成员在方法中);
  3. 初始化阶段会递归先初始化父类。

类在虚拟机内有9个生命期状态,主要分4个阶段:初始阶段,load,link,init。总之,在我们能够真正使用这个类的时候,类的状态会必须是在:CLASS_INITIALIZED状态,表示这个类已经初始化完成了。

class_state.webp

详细全文内容