美文网首页
ClassLoader双亲委派机制

ClassLoader双亲委派机制

作者: 假装门口当前台 | 来源:发表于2021-03-05 10:44 被阅读0次

    最近看到了这个ClassLoader(类加载器),平时开发Android的时候很少注意这块,今天学习了一下,顺便总结一下。
    我们平时写的Java代码,通过编译器会转成java字节代码保存在.class文件中。然后ClassLoader去加载class文件到JVM(java虚拟机)去执行。
    JVM提供了三层ClassLoader,包含
    Bootstrap classLoader C++实现,主要负责加载核心的类库,包含构造下面两个
    ExtClassLoader 扩展加载类,负责加载jre/lib/ext的一些扩展jar
    AppClassLoader 系统加载类,这个主要就是用来加载我们平时写的java代码

    类加载器是通过类名实现加载,由于不同的加载器加载相同的类名,得到的class实例其实是不一样的,是两个不同的类,我们通过class.newInstance来实例,这就导致如果使用加载器,运行中可能出现风险和报错。
    然后双亲委派机制就是解决这个问题。大概流程是这样
    1.类加载器首先会层层调用AppClassLoader-> ExtClassLoader-> BootstrapLoader,会通过这样,先一层一层往下询问,是否可以加载,如果都不行,在反向回来BootstrapLoader-> ExtClassLoader-> AppClassLoader,最后报错classnotfound。

    2.中间过程中类加载过会有缓存,只加载一次

    3.这样的方式正常最终都是使用BootstrapLoader去加载类,实现java中的基类,想Integer,Boolean这些,即使重写类,都没生效的缘故,使得都是同个加载器加载出来,都是同个类,来保证安全性

    相关文章

      网友评论

          本文标题:ClassLoader双亲委派机制

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