zoukankan      html  css  js  c++  java
  • Java 加载器

    类的加载是由类加载器完成的,类加载器包括:

    根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。

    从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制(PDM )。 

    PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。

    类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。

     JVM 不会向 Java 程序提供对 Bootstrap 的引用。下面是关于几个类加载器的说明:

    • Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
    • Extension :从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ;
    • system class loader :又叫应用类加载器,其父类是 Extension 。它是应用最广泛的类加载器。它从环境变量 classpath或者系统属性 java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。
    • 用户自定义类加载器: java.lang.ClassLoader 的子类;应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader       

    父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。 

    加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。
  • 相关阅读:
    每日一题 为了工作 2020 0412 第四十一题
    每日一题 为了工作 2020 04011 第四十题
    每日一题 为了工作 2020 0410 第三十九题
    每日一题 为了工作 2020 0409 第三十八题
    每日一题 为了工作 2020 0408 第三十七题
    每日一题 为了工作 2020 0407 第三十六题
    每日一题 为了工作 2020 0406 第三十五题
    每日一题 为了工作 2020 0405 第三十四题
    学习总结(二十四)
    学习总结(二十三)
  • 原文地址:https://www.cnblogs.com/newcoder/p/5750379.html
Copyright © 2011-2022 走看看