• 类加载器(ClassLoader)


    1. 类加载器概述

    1.1 类加载器的作用

    • 把 .class 文件加载到 JVM 的方法区中,变成一个 Class 对象!

    1.2 类加载器分类

    1. 类加载器也是一个类: ClassLoader;
    2. Java 提供了三种类加载器:
      • 引导类加载器, 加载 java 自己的类库, 即 rt.jar 中的类;
      • 扩展类加载器, 加载扩展 jar 包, 即 lib/ext 目录下的类;
      • 系统类加载器, 加载 classpath 下的类, 包含开发人员写的类,和第三方的 jar 包.
    3. 类加载器之间存在上下级关系,系统类加载器的上级是扩展类加载器, 而扩展类加载器的上级是引导类加载器.

    2. 类加载器的委托机制

    1. 代码中出现这么一行: new A();
      • 系统发现了自己加载的类, 其中包含了 new A(), 这说明需要系统去加载 A 类;
      • 系统会给自己的领导打电话, 让扩展去自己的地盘去加载 A 类;
      • 扩展会给自己的领导打电话, 让引导区自己的地盘去加载 A 类;
      • 引导自己真的区 rt.jar 中寻找 A 类
        • 如果找到了, 那么加载之,然会返回 A 对应的 Class 对象给扩展, 扩展也会把这个 Class
          返回给系统, 这样,类加载就结束了.
        • 如果没有找到, 引导给扩展返回一个 null, 扩展会自己去自己的地盘,去寻找 A类;
          • 如果找到了, 那么加载之,然后返回 A 对应的 Class 对象给系统,这样, 类加载就结束了;
          • 如果没有找到,扩展返回一个 null 给系统, 系统去自己的地盘(应用程序下)加载 A 类;
            • 如果找到了, 那么加载之, 然后返回这个 Class 对象, 类加载就结束了;
            • 如果没找到, 则抛出异常 ClassNotFoundException

    3. Tomcat 的类加载器

    3.1 Tomcat 提供两种类加载器

    • 服务器类加载器: 它负责加载 ${CATALINA_HOME}/lib 目录下的类;
    • 应用类加载器: 它负责加载 ${CONTEXT_HOME}/WEB-INF/lib${CONTEXT_HOME}/WEB-INF/classes 目录下的类;

    3.2 特性

    1. 服务类加载器: 先自己动手,然后再去委托;
    2. 应用类加载器: 先自己动手,然后再去委托;
    3. Tomcat 类加载器优先级(由高到低)
      • 应用下的 classes, 应用类加载器
      • 应用下的 lib, 应用类加载器
      • 服务器下的 lib, 服务器类加载器

    参考资料:

  • 相关阅读:
    关于剪切板
    编译器选项
    【转】预编译头没有使用的问题
    【转】fatal error C1900: “P1”(第“20081201”版)和“P2”(第“20080116”版)之间 Il 不匹配
    pImpl
    HIVE 2.3.4 本地安装与部署 (Ubuntu)
    计算机网络 自顶向下 复习提要 数据链路层
    计算机网络 自顶向下 复习提要 网络层2
    计算机网络 自顶向下 复习提要 网络层
    计算机网络 自顶向下 复习提要 传输层(TCP)
  • 原文地址:https://www.cnblogs.com/linkworld/p/7682113.html
Copyright © 2020-2023  润新知