• 面试(类加载器)


    一、目标

    类加载器(ClassLoader)是Java虚拟机(JVM)的一部分,用于加载Java类文件到内存中,并生成对应的Class对象。类加载器负责在运行时查找和加载类文件,为Java程序提供动态加载和运行时扩展的功能。

    二、类型

    2.1、启动类加载器(Bootstrap ClassLoader)

    也称为根加载器,它是JVM内嵌的加载器,负责加载Java核心类库(如java.lang包中的类)和其他需要在JVM启动时就被加载的类。它是所有其他类加载器的父加载器。由于是用C++实现的,因此在Java代码中无法直接获取到启动类加载器的引用。

    2.2、扩展类加载器(Extension ClassLoader):

    它是由sun.misc.Launcher$ExtClassLoader实现的,负责加载Java的扩展类库(如javax包中的类)。它是由启动类加载器加载的,并且是应用类加载器的父加载器。

    2.3、应用类加载器(Application ClassLoader)

    也称为系统类加载器,它是由sun.misc.Launcher$AppClassLoader实现的,负责加载应用程序的类。应用类加载器是用户自定义的类加载器的默认父加载器。

    三、加载策略

    3.1、问题

    解决类的加载顺序、一致性、可靠性、唯一性等;

    3.2、双亲委派机制

    双亲委派机制(Delegation Model)是Java类加载器的一种加载策略,它定义了类加载器在加载类时的行为和优先级。

    双亲委派机制的基本思想是:当一个类加载器需要加载一个类时,它首先将加载请求委派给父类加载器,只有当父类加载器无法加载该类时,才由自身加载器进行加载。这个过程会一直循环,直到顶层的启动类加载器。如果所有的父类加载器都无法加载该类,最终由子类加载器加载。

    3.3、优势

    3.3.1、避免类的重复加载

    每个类加载器都有自己的命名空间,当父类加载器已经加载了一个类,子类加载器无需重新加载,直接使用父类加载器加载的类,避免了重复加载。

    3.3.2、提供类加载的安全性和一致性

    通过双亲委派机制,类加载器会沿着加载链向上委派加载请求,保证了加载的类来自于同一个源,确保了类的安全性和一致性。

    3.3.3、确保核心类的一致性

    由启动类加载器加载的核心类库是Java虚拟机的一部分,能够保证在不同的Java应用中,加载的核心类库是一致的。

    需要注意的是,双亲委派机制并不是强制性的,可以通过自定义类加载器绕过双亲委派机制,实现特定的加载逻辑,例如热部署等需求。

    双亲委派机制在Java中的应用非常广泛,不仅用于加载Java核心类库,还用于加载应用程序的类。它确保了类的加载按照优先级和一致性进行,提供了类加载的可靠性和安全性。

  • 相关阅读:
    美团面试——北京总部四轮面
    【人脸识别】基于matlab GUI人数统计【含Matlab源码 2121期】
    一小时上手MindSpore
    Golang获取所有环境变量
    [C#]C#调用cplex
    Radius OTP实现VPN登录认证 安当加密
    动态获取input框的值
    Dolphinscheduler的API接口问题
    软信天成:如何利用大数据提高客户体验?
    OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法
  • 原文地址:https://blog.csdn.net/qq_18871751/article/details/132796993