美文网首页
3.类加载器三双亲委托机制

3.类加载器三双亲委托机制

作者: 文茶君 | 来源:发表于2019-12-18 20:36 被阅读0次

    双亲委托机制

    在双亲委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器之外,其余的类加载器都有且只有一个父加载器。



    如果loader1想加载sample类,并不是loader1直接去加载到jvm中,而是loader1把任务转交到系统加载器去完成。系统加载器会让扩展类加载器去加载。扩展类加载器尝试着去加载sample类。而扩展类加载器发现自己有父加载器,会让根类加载器去加载。而根类加载器处于最顶点。所以根类加载器会去尝试加载sample类。但是根类加载类加载不了sample类,加载失败,会让扩展类加载器加载,当然还会失败。最后,发现系统类加载器可以加载,接着系统加载器会加载并返回给loader1。loader1并没有加载sample类。



    自底向上检查类是否已经加载,自顶向下尝试加载。
    Bootstrap ClassLoader/启动类加载器

    $JAVA_HOME中jre/lib/rt.jar里所有的class。由c++实现,不是classloader子类

    Extension ClassLoader/扩展类加载器

    负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

    App ClassLoader/系统类加载器

    负责加载classpath中指定的jar包及目录中class

    如果有一个类加载器能够成功加载Test类,那么这个类加载器被称为定义类加载器,所有能成功返回class对象引用的类加载器(包括定义类加载器)都被称为初始类加载器

    查看加载类.png
    加载类.png
    另外一段代码

    结果

    第一个只是创建引用,并没有新建对象。

    类加载器

    第一行并不会导致CL的初始化
    反射会导致类的初始化。
    调用ClassLoader类的LoadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化。

    相关文章

      网友评论

          本文标题:3.类加载器三双亲委托机制

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