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

java的3大加载器

  1. 引导类加载器 BootStrapClassLoader

  2. 扩展类加载器 ExtensionClassLoader

  3. 应用程序类加载器 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. 类的加载子系统又进一步分为:加载、链接、初始化
    类加载到内存中会经过加载、验证、准备、解析、初始化(主要是 静态成员变量、静态代码块 的初始化),初始化完成后才算加载到内存中
完成上面动作后应用程序就算启动完成了,剩下的就是应用程序的生命周期

猜你喜欢

转载自blog.csdn.net/qq_41813208/article/details/108577391