• classLoader的工作机制


    ClassLoader的主要方法

    1.loadClass(String name) 给定一个类名,记载一个类。

    2.defineClass(byte[] b, int off, int len) 根据给定的字节数组定义一个类

    3.findClass(String name) 查找一个类

    4.findLoadedClass(String name),寻找一个被加载的类。

    ClassLoader的等级加载机制

    整个JVM提供三层ClassLoader

    1.Bootstrap ClassLoader (启动类加载器),主要记载jvm自身记载所需要的类,这个classloader完全是由jvm自身控制的。别人也访问不到这个类。

    2.ExtClassLoader (扩展类加载器), 服务于system.getProperty("java.ext.dirs")中。

    3.AppClassLoader,服务于system.getProperty("java.class.path")中。

    我们在应用中提取的顶级classloader顶级父类是ExtClassLoader 。当试图获取一个类的classloader时,获取的是null,意味着是启动类加载器。

    Classloader的双亲委托模式

    在类记载的时候,系统会判断当前的类是否已经被加载,如果已经被加载,就会直接返回可用的类,否则就会尝试加载,再尝试加载时,会尝试双亲处理,如果双亲请求失败,则会自己处理。

    实现类的热部署

    JVM表示一个类是否是同一个类有两个条件:

    1.类的完整类名是否一样。

    2.砍价在这个类的classloader是否是一样的。

    所以实现类的热部署可以创建不同的classloader对象,然后通过这个不同的实例对象加载同名的类。

  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/caobojia/p/6852410.html
Copyright © 2020-2023  润新知