美文网首页我爱编程
类加载的原理

类加载的原理

作者: leoryzhu | 来源:发表于2018-03-06 11:16 被阅读24次

    Java类加载器

    类加载器可以分为三类:

    启动类加载器(Bootstrap ClassLoader):负责加载\lib目录下或者被-Xbootclasspath参数所指定的路径的,并且是被虚拟机所识别的库到内存中。

    扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录下或者被java.ext.dirs系统变量所指定的路径的所有类库到内存中。

    应用类加载器(Application ClassLoader):负责加载用户类路径上的指定类库,如果应用程序中没有实现自己的类加载器,一般就是这个类加载器去加载应用程序中的类库。

    类加载器的双亲委派模型,原理如下:

    如果一个类加载器收到了加载类的请求,它不会自己立即去加载类,它会先去请求父类加载器,每个层次的类加载器都是如此。层层传递,直到传递到最高层的类加载器,只有当 父类加载器反馈自己无法加载这个类,才会有当前子类加载器去加载该类

    流程图如下

    类加载器的双亲委派模型

    Android虚拟机类加载机制
    Java虚拟机加载的是class文件,而Android虚拟机加载的是dex文件(多个class文件合并而成)
    Android类加载器类图如下所示:

    Android类加载器类图

    可以看到Android类加载器的基类是BaseDexClassLoader,它有派生出两个子类加载器:

    PathClassLoader: 主要用于系统和app的类加载器,其中optimizedDirectory为null, 采用默认目录/data/dalvik-cache/

    DexClassLoader: 可以从包含classes.dex的jar或者apk中,加载类的类加载器, 可用于执行动态加载, 但必须是app私有可写目录来缓存odex文件. 能够加载系统没有安装的apk或者jar文件,

    参考: Android虚拟机框架:类加载机制

    相关文章

      网友评论

        本文标题:类加载的原理

        本文链接:https://www.haomeiwen.com/subject/tgelfftx.html