Java虚拟机中的类加载子系统,它的主要作用就是通过多种类加载器(ClassLoader)来查找和加载Class文件到Java虚拟机中。
ClassLoader的类型:(Java)
包括系统类加载器和自定义加载器。系统类:Bootstrap ClassLoader,Extensions ClassLoader和Application ClassLoader。
Bootstrap ClassLoader:引导类加载器,C/C++代码实现的加载器,用于加载指定的JDK的核心类库(不能被Java代码访问)。
Extensions ClassLoader:拓展类加载器,它用于加载Java的拓展类,提供除了系统类之外的额外功能。
Application ClassLoader:应用程序类加载器。
(图片来源:刘望舒的安卓进阶解密)
1.ClassLoader是一个抽象类,其中定义了ClassLoader的主要功能。
2.SecureClassLoader 继承了抽象类ClassLoader,但SecureClassLoader并不是ClassLoader的实现类,而是拓展了ClassLoader
类加入了权限方面的功能,加强了ClassLoader的安全性。
3.URLClassLoader继承自SecureClassLoader,可以通过URL路径从jar文件和文件夹中加载类和资源。
4.ExtClassLoader和AppClassLoader都继承自URLClassLoader,他们都是Launcher的内部类,Launcher是Java虚拟机的入口应用,ExtClassLoader和AppClassLoader都是在Launcher中进行初始化的。
双亲委托模式:类加载器查找Class所采用的就是双亲委托模式,意思就是向上传递给父加载器,一直到找到返回为止,如果传递到了顶层的Bootstrap ClassLoader还是没有找到,就会向下寻找。
优点:1.避免重复加载;2.更加安全。
安卓中的ClassLoader:和Java类似,系统类加载器:BootClassLoader,PathClassLoader和DexClassLoader。
BootClassLoader:安卓系统用它来预加载常用类,不同是它是Java实现的。
PathClassLoader:用它来加载系统类和应用程序的类。
DexClassLoader:可以加载dex文件以及包含dex的压缩文件(apk和jar文件)。
(图片来源:刘望舒安卓进阶解密)