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进程中采用工厂模式创建