理解ClassLoader

209 阅读1分钟

Java中的ClassLoader

1.ClassLoader的类型

系统类加载器:

Bootstrap ClassLoader:jre/lib    -Xbootclasspath

Extensions ClassLoade:jre/lib/ext   java.ext.dir

Application ClassLoader:当前应用程序的Classpath目录;java.class.path

自定义加载器:继承java.lang.ClassLoader实现

2.ClassLoader的继承关系


3.双亲委托模式

首先判断该Class是否已经加载,没有则委托给父加载器进行查找,依次递归,直到委托到顶层Bootstrap Classloader,找到就返回,没找到则依次向下查找。

好处:

  • 避免重复加载
  • 更加安全

4.自定义ClassLoader

(1)继承ClassLoader

(2)覆写findClass方法,在其中调用defineClass方法

Android中的ClassLoader

1.类型

系统类加载器:

BootClassLoader

DexClassLoader:加载Dex相关文件

PathClassLoader:加载系统类和应用程序的类,通常加载已安装的apk的dex文件(存储在data/dalvik-chche)。

自定义类加载器

2.ClassLoader的继承关系


3.ClassLoader的加载过程

遵循双亲委托模型

4.BootClassLoader的创建

在Zygote进程的Zygote入口方法中创建,用于加载preloaded-classes文件中存有的预加载类。

5.PathClassLoader的创建

在SystemServer进程中采用工厂模式创建