栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java类加载

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java类加载

Java类加载

Java类加载器

1、BootStrapClassLoader2、ExtClassLoader3、AppClassLoader4、CustomClassLoader 类加载机制

1、全盘负责2、双亲委派3、缓存机制 类加载的时机

Java类加载器

  Java共有三种类加载器,分别是BootStrapClassLoader、ExtClassLoader、AppClassLoader,如果要算的话还可以加上CustomClassLoader,下面分别介绍:

1、BootStrapClassLoader

  启动类加载器,最顶层的加载器,由c++编写而成,主要负责加载Java的核心类库,比如jre/lib/rt.jar,开发者无法直接获取该加载器的引用,所以不允许直接通过引用进行操作。

2、ExtClassLoader

  标准扩展类加载器(extension class loader),由Java实现,主要负责加载jre/lib/ext下的jar包,开发者可以直接使用的标准扩展类加载器。

3、AppClassLoader

  系统类加载器(application class loader),也叫SystemClassLoader,由Java实现,主要负责加载当前应用classpath下的类,开发者可以直接使用。

4、CustomClassLoader

  用户自定义类加载器,实现自定义类加载器时要继承ClassLoader类,有兴趣的可以自行研究ClassLoader的源码,简单介绍ClassLoader类中的核心方法:

findClass:查找类路径是否在当前加载路径下loadClass:加载类defineClass:将class文件加载到JVM的方法区 类加载机制 1、全盘负责

  当一个类加载器加载某个class是,该class所依赖和引用的class也由该类加载器加载,除非显式使用另一个类加载器加载。
  看完这个简单的定义,大家有没有什么疑问。上面介绍了几个类加载器都有自己所限定的加载范围,按照全盘负责制的定义,如果当前类的引用类或者依赖类不在当前类加载器的加载范围内怎么办?

2、双亲委派

  当某一个类加载器需要加载某个类时,它首先把这个任务委托给它的上级(父级)类加载器,递归这个委托操作,如果上级类加载器没有加载,自己才会去加载这个类。
  怎么确定上级加载器?
  主要的三个类加载器BootStrapClassLoader、ExtClassLoader、AppClassLoader其实根据名字就可以确定上下级关系,我们由下往上说:

AppClassLoader.parent = ExtClassLoaderExtClassLoader.parent = null,
为什么它的parent属性值为null?因为BootStrapClassLoader由c++实现,在Java中获取不到。但当类加载器的parent属性值为null时,默认其上级类加载器是BootStrapClassLoader。

  所以由下往上是:
CustomClassLoader -> AppClassLoader -> ExtClassLoader -> BootStrapClassLoader

上面这张图是借鉴大佬的博文,参考:https://blog.csdn.net/codeyanbao/article/details/82875064

  双亲委派的作用?
  1、防止重复加载同一个class文件
  2、保证核心.class文件不被篡改,因为加载后创建的类实列不同

  其实上图中类加载器在加载class时还有一个逻辑,都是先去检查缓存中该类是否已加载,如果已加载则从缓存中取出,否则去加载。

  双亲委派的查找过程?
  其实根据上图中我们可以看到在加载类时不断的向上委托查找至最上层BootStrapClassLoader,找不到再想下查找。
  1、向上查找,查缓存
  2、向下查找,查路径

3、缓存机制

  保证所有被加载过的class都缓存起来,程序需要时从缓存中取,缓存中取不到则加载二进制创建class对象。

类加载的时机

创建类实列时,new object()访问某个类的静态变量,或者对静态变量进行赋值调用类的静态方法反射初始化一个类的子类(会先初始化子类的父类)JVM启动时标明的启动类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762606.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号