0
点赞
收藏
分享

微信扫一扫

类的加载器的介绍 和 类的加载过程

莞尔小迷糊 2022-02-24 阅读 52


java的3大加载器



引导类加载器 ​​BootStrapClassLoader​



扩展类加载器 ​​ExtensionClassLoader​



应用程序类加载器 ​​ApplicationClassLoader​

三大类加载器可以简单的理解为:

​BootStrapClassLoader​​加载的是JVM核心类的类库
​ExtensionClassLoader​​加载的是扩展类的类库
​ApplicationClassLoader​​加载我们自己写的java类类库



类的加载器加载了哪些类库

jdk1.8中​​BootStrapClassLoader​​​加载​​D:\Program Files\Java\jdk1.8.0_201\jre\lib​​下的


  • resources.jar
  • rt.jar
  • sunrsasign.jar
  • jsse.jar
  • jce.jar
  • charsets.jar
  • jfr.jar
    以及 ​​D:/Program Files/Java/jdk1.8.0_201/jre/classes​​文件夹下的class文件

​ExtensionClassLoader​​加载java的扩展类类库

​D:\Program Files\Java\jdk1.8.0_201\jre\lib\ext​

例如


  • access-bridge-64.jar
  • cldrdata.jar
  • dnsns.jar
  • jaccess.jar
  • jfxrt.jar
  • localedata.jar
  • nashorn.jar
  • sunec.jar
  • sunjce_provider.jar
  • sunmscapi.jar
  • sunpkcs11.jar
  • zipfs.jar


​ApplicationClassLoader​​加载应用程序的类


java应用程序启动的过程:


  1. 首先​​.java​​文件被javac编译成​​.class​​文件。
  2. 当我们启动​​java程序​​的时候,​​.class​​文件通过类加载子系统加载到内存中,类加载子系统分为3大加载器(​​BootStrapClassLoader、ExtensionClassLoader、ApplicationClassLoader​​)。
    首先需要加载java基础的类库(上面有介绍),也就是​​BootStrapClassLoader​​加载java类库,当引导类加载器加载完毕后,接着​​ExtensionClassLoader​​加载扩展类类库,再接着就是​​ApplicationClassLoader​​将main方法所在的类加载到内存中。
    在程序的运行过程中会使用到其它类文件,加载除main方法以为的类时,存在 ​​类的双亲委托机制 以及 沙箱机制​​,可以简单的理解为先询问​​BootStrapClassLoader​​有没有将类加载到内存,如果没有,再接着询问​​ExtensionClassLoader​​有没有将这个类加载到内存,如果前面都没有加载才会使用​​ApplicationClassLoader​​进行加载。​​BootStrapClassLoader、ExtensionClassLoader​​他们加载的类路径是固定的,因此他们加载的类也是比较固定的(除非将自己的类放到类库路径下)。
  3. 类的加载子系统又进一步分为:​​加载、链接、初始化​​。
    类加载到内存中会经过加载、验证、准备、解析、初始化(​​主要是 静态成员变量、静态代码块 的初始化​​),初始化完成后才算加载到内存中

完成上面动作后应用程序就算启动完成了,剩下的就是应用程序的生命周期



举报

相关推荐

0 条评论