• JVM学习(宋红康)之类加载器子系统


    Day1:类加载器子系统

    类的加载过程:加载、链接、初始化:

     

    以加载HelloLoader类为例:

     

    三个过程的详情:

    • 加载:

     

    加载方式:

     

    • 链接;

     

    • 初始化:

     

    类加载器分为三类:引导类加载器(C、C++)、扩展类加载器(Java)、系统类加载器(Java)

    其中引导类加载器是获取不到的,且无父加载器

    • Java的核心类库是由引导类加载器加载
    • 扩展类加载器主要加载指定目录下的字节码文件,如果用户创建的jar包放在此目录下,也会由扩展类加载器加载
    • 用户自定义的类加载器默认为系统类加载器

     

    扩展类和系统类加载器都是间接继承于ClassLoader

     

    双亲委派机制

    Java虚拟机是采用按需加载的方式,什么时候用着这个类便会什么时候加载

    • 如果一个类加载器收到了类加载请求,首先将此请求向其父类加载器委托
    • 如果父类加载器还有父类加载器,继续向上委托,直至委托到引导类加载器
    • 如果父类加载器可以完成加载,则该类在父类加载器加载,否则,向下一层加载器加载

    沙箱安全机制:会阻断由于外界的恶意攻击导致系统的崩溃

    JVM中两个class对象是否为同一个类的两个必要条件

    • 类的完整类名必须一致,包括包名
    • 加载这个类的加载器(ClassLoader,指ClassLoader实例对象)必须相同

    Note

    如果一个类是由用户类加载器(除了引导类加载器以外的),JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。当解析一个类型到另一个类型的引用的时候,JVM需要保证这两个类型的类加载器是相同的。

    Java程序对类的使用方式分为主动使用和被动使用

     

  • 相关阅读:
    Matlab数组操作教程
    如何建立编程思想和提高编程思想
    超详细Redis使用手册
    群体智能的实现与优化: 使用Metal技术在Swift中打造高效模型
    mybatis缓存-二级缓存
    Java序列化与JNDI注入
    编写缓存友好型程序技巧
    sphinx 部分高级功能汇总说明
    JSON Web Tokens攻击漏洞手法
    2023十大杰出外盘黄金交易APP平台最新排名
  • 原文地址:https://blog.csdn.net/m0_55895641/article/details/126508164