虚拟机根据类名加载二进制流的过程是由类加载器实现的,也就是classloader,java提供了三种classloader
- BootStripClassLoader:加载jre/lib/rt.jar
- ExtensionClassLoader:加载jre/lib/ext/*.jar
- AppClassLoader:加载CLASS_PATH目录下和应用程序
类的加载采用双亲委派机制
- appclassloader加载类时先委托给父classloader进行加载
- 父classloader在委托给爷爷classloader进行加载,以此类推
- 当最顶层的classloader不能加载时,返回给次顶层的classloader尝试加载
- 如果返回到appclassloader去加载并且没加载成功,会抛出notfindclass异常
Android的classloader分为3种
- BootClassLoader
- BaseDexClassLoader
- PathClassLoader: 可以加载已安装的apk的dex
- DexClassLoader:可以加载自定义目录的dex(热修复,插件化)