• JVM类加载机制二


    类加载器与双亲委派模型

    类加载器

    类加载的操作不是有虚拟机完成的,而是由类加载器完成的,这样可以让程序定义决定加载哪个类。
    类加载器的分类:
    从虚拟机的角度有两种加载器,一种是启动类加载器Bootstrap Classloader,它是由C语言编写的,是虚拟机的一部分;另一种的其他的所有加载器,它是由Java编写的,存在于虚拟机外部,这些加载器都继承于Java.lang.ClassLoader类
    从开发者角度来说共有四种加载器,启动类加载器BootStap ClassLoader、扩展类加载器Extension ClassLoader、应用程序加载器Application ClassLoader、还有一种用户自定义加载器。
    启动类加载器
    负责将JAVA/HOME/lib文件夹下的类库加载到内存中。开发者无法直接使用启动类加载器进行类加载的任务
    扩展类加载器
    负责将JAVA/HOME/lib/ext目录或者由系统变量java.ext.dir指定的位置中的所有类库加载进来。
    应用程序类加载器/系统类加载器
    负责加载用户类路径上(ClassPath)所指定的类库。如果用户没有自定义加载器,那么这个就是程序中默认的类加载器。此类加载器可以通过
    ClassLoader.getSystemClassLoader()获取。

    双亲委派模型

    当一个类加载器接到类加载任务时,会将其交给它的父类加载器,所以最终类加载任务会传递到启动类加载器,如果父类加载器不能完成加载任务,则由子类加载器尝试完成类的加载。

    使用双亲委派模型的好处
    无论哪个类加载器去加载一个类,最后加载这个类的类加载器是同一个,这保证了这个类在虚拟机中的唯一性。

    参考:《深入理解Java虚拟机》

  • 相关阅读:
    leetcode66 plusOne
    park/unpark 阻塞与唤醒线程
    leetcode55 jumpGame贪心算法
    ACID特性与事务的隔离级别
    PCB ODB++(Gerber)图形绘制实现方法
    PCB 所建不凡 AWS 技术峰会2018 • 深圳站 2018.9.20
    PCB SQL SERVER 位运算应用实例
    PCB SQL SERVER 枚举分割函数(枚举值分解函数)
    PCB SQL SERVER 正则应用实例
    PCB Genesis 外形加内角孔实现方法
  • 原文地址:https://www.cnblogs.com/ozho/p/10600228.html
Copyright © 2020-2023  润新知