首页 > 类加载机制及双亲委派模型​
头像
牛客462784608号
编辑于 2020-09-10 19:56
+ 关注

类加载机制及双亲委派模型​

  • 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放在 <JRE_HOME>\lib 目录中的,或者被 -Xbootclasspath 参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。启动类加载器无法被 Java 程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委派给启动类加载器,直接使用 null 代替即可。

  • 扩展类加载器(Extension ClassLoader)这个类加载器是由 ExtClassLoader实现的。它负责将 <JAVA_HOME>/lib/ext 或者被 java.ext.dir 系统变量所指定路径中的所有类库加载到内存中,开发者可以直接使用扩展类加载器。

  • 应用程序类加载器(Application ClassLoader)这个类加载器是由 AppClassLoader实现的。由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,因此一般称为系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。
  • 双亲委派模型

  • 1. 工作过程

    一个类加载器首先将类加载请求转发到父类加载器只有当父类加载器无法完成时才尝试自己加载

    2. 好处

    使得 Java 类随着它的类加载器一起具有一种带优先级的层次关系,从而使得基础类得到统一。

  • 包括以下 7 个阶段:

    • 加载(Loading)
      • 通过类的完全限定名称获取定义该类的二进制字节流。
      • 将该字节流表示的静态存储结构转换为方法区的运行时存储结构。
      • 在内存中生成一个代表该类的 Class 对象,作为方法区中该类各种数据的访问入口。
    • 验证(Verification)
    • 符合当前虚拟机的要求,并且不会危害虚拟机自身的安全
    • 准备(Preparation)
    • 类变量是被 static 修饰的变量,变量初始值一般为 0 值.如果类变量是常量(final),那么它将初始化为表达式所定义的值而不是 0。
    • 解析(Resolution)
    • 初始化(Initialization)

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐