美文网首页
类的加载

类的加载

作者: 机器不能学习 | 来源:发表于2018-09-19 20:26 被阅读0次

    jvm中,类的加载分为:加载+链接+初始化
    在这个过程中,类的加载少不了类加载器。它与反射功能类似。

    类加载器分为启动类加载器、扩展类加载器、系统类加载器。
    三个加载器呈现双亲委派模式。双亲委派:接受到任何任务都把任务交与上一级处理,直到该类没有上级(到了启动类加载器)。这时启动类加载器就先处理(首先看缓存中有无该对象,没有再去所管辖目录寻找),如果找不到再把任务交与下层处理。
    这个模式的好处在于,不会重复加载。如果父亲已经加载子类没必要加载。(比如你要加载一个object类,子类接受任务后就加载了,那么系统就有两个object了,如果交给最上层,那么最上层会在它的管辖中找到该类,并把该类返回,就避免了重复加载)

    实现类:
    ClassLoader:顶级加载类。
    它提供了方法loadClass():先会查看是否被缓存过,不存在在查看是否有父类可以上交,没有再去查找。还是没找到的话会调用findClass()方法。
    findClass():该方法是用户自己实现的寻找类方法
    defineClass:与findClass连用,该方法会把传入的byte字节创建成对象,并且返回
    resolveClass():该方法会在对象关键完成的同时被解析

    URLClassLoader
    该类是一个扩展类,它已经为我们写好了以上方法,只用直接传入一个URL就能够获得对象。

    类与解析器的关系:
    判断两个Class对象是否为同一个类的根据是完整类名相同,加载类相同。
    如果用findClass就不会在缓存中寻找,生产的两个类实例一定不同。而loadClass先会去缓存找,所以返回的实例可能相同

    应用:自定义加载器,网络加载,热点部署
    https://blog.csdn.net/javazejian/article/details/73413292

    线程上下文:违背双亲委派,为SPI提供服务
    https://blog.csdn.net/javazejian/article/details/73413292

    相关文章

      网友评论

          本文标题:类的加载

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