类加载器介绍

作者: Jeff_tian | 来源:发表于2020-03-02 12:13 被阅读0次
  • 有两种类型的类加载器:
    • Java虚拟机自带的类加载器
      • 根类加载器(Bootstrap,也叫启动类加载器)
        该加载器没有父加载器。它所负责加载虚拟机的核心类库,如java.lang.*等,从系统属性sun.boot.class.path所指定的目录中加载类库,它的实现依赖于底层操作系统,属于虚拟机的实现一部分,它并没有继承java.lang.ClassLoader类。加载的jre\lib\rt.jar。
      • 扩展类加载器(Extension)
        它的父加载器为根类加载器,它从java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的jre\lib\ext子目录(扩展目录)下加载类库,如果把用户创建的JAR文件放在这个目录下,也会自动由扩展类加载器加载,扩展类加载器时纯Java类,是java.lang.ClassLoader类的子类。只加载JAR包
      • 系统(应用)类加载器(System)
        也称为应用类加载器,它的父加载器为扩展类加载器,它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器,系统类加载器是纯Java类,是java.class.ClassLoader类的子类。
    • 用户自定义的类加载器
      • java.lang.ClassLoader的子类
      • 用户可以定制类的加载方式
  • 数组类型不是ClassLoader创建的,是由Java runtime创建的。数组类型的Class.getClassLoader(),和对应的元素类型返回的ClassLoader一样。如果是原生类型的数组,是没有ClassLoader的。
  • 类加载器双亲委托模型的好处:
    1. 可以确保Java核心库的类型安全,所有的Java应用都至少会引用java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被加载到Java虚拟机中,如果这个加载过程是由Java应用自己的类加载器所完成的,那么很可能就会在JVM中存在多个版本的java.lang.Object类,而且这些类之间还是不兼容的,互相不可见(正是命名空间在发挥着作用)。
    2. 可以确保Java核心类库所提供的类不会被自定义的类所替代
    3. 不同的类加载器可以为相同名称(binary name)的类创建额外的命名空间。相同的名称的类可以并存在Java虚拟机中,只需要用不同的类加载器来加载他们即可。不同的类加载器所加载的类之间是不兼容,这就相当于在Java虚拟机内部创建了一个又一个互相隔离的Java类空间,这类技术在很多框架中都得到了实际应用。
  • 类加载器的加载
    内建于JVM中的启动类加载器会加载java.lang.ClassLoader以及其他的Java平台类,当JVM启动时,一块特殊的机器码会运行,它会加载扩展类加载器与应用类加载器,这块特殊的机器码叫做启动类加载器(bootstrap)。启动类加载器并不是Java类,而其他的类加载器则都是Java类,启动类加载器是特定于平台的机器指令,它负责开启整个加载过程。所有类加载器(除了启动类加载器)都被实现为Java类。不过总归要有一个组件来加载第一个Java类加载器,从而让整个加载过程能够顺利进行下去,加载第一个纯Java类加载器就是启动类加载器的职责。启动类加载器还会负责加载供JRE正常运行所需要的基本组件,这包括java.util与java.lang包中的类等等。

相关文章

  • 深入浅出“类加载器”

    内容概述 “类加载”介绍 “类加载器”介绍 深入“类加载器” 深入“父亲委托机制” 一,“类加载”介绍 “加载”是...

  • tomcat类加载器

    首先介绍下JVM的类加载器,如下图: 包含启动类加载器(Bootstrap ClassLoader)、扩展类加载器...

  • 【Using English】57 Class Loaders

    original 1. 介绍类加载器 类加载器负责在运行时动态地加载Java类到Java虚拟机。当然,类加载器也是...

  • 什么是类加载器?

    类加载器介绍:1.1 类加载器(class loader)用来加载Java类到Java虚拟机中。 1.2 java...

  • 透过现象看本质:Java类动态加载和热替换

    摘要:本文主要介绍类加载器、自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换。 最近,遇到了两...

  • 每天一个知识点(4)--JVM-类加载子系统-双亲委派

    在上篇中介绍了JVM中的三种类加载器,按照父子关系分别为启动类加载器、扩展类加载器、应用程序类加载器三个。当一个类...

  • 类加载器介绍

    有两种类型的类加载器:Java虚拟机自带的类加载器根类加载器(Bootstrap,也叫启动类加载器)该加载器没有父...

  • java类加载器及其原理

    java类加载器 : java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器) ...

  • 命名空间与类的卸载

    命名空间介绍  每个类加载器都有自己的命名空间,命名空间由该加载器及所有的父加载器所加载的类组成。也就是说,命名空...

  • java基础知识之java类加载器

    1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载器可以被加载...

网友评论

    本文标题:类加载器介绍

    本文链接:https://www.haomeiwen.com/subject/olxmkhtx.html