类加载器

作用

将class文件字节码文件加载到内存中,并将这些静态数据转换为方法区中运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区数据的访问入口。这样JVM就可以使用该类。

类加载器树状结构

11.类加载器 - 图1

1、引导类加载器(bootstrap class loader)

2、扩展类加载器(extensions class loader)

3、应用程序类加载器(Application class loader)

4、自定义类加载器

引导类加载器

  • 1、用于加载java核心代码库(jre/lib/rt.jar),是用C++代码实现的,并不继承java.lang.ClassLoader
  • 2、加载扩展类加载器和应用程序加载器。并指定他们的父类加载器

扩展类加载器

  • 组合于引导类加载器
  • 继承于抽象类ClassLoader
  • 用来加载java的扩展库(jre/ext/*.jar),java虚拟机的实现会提供一个扩展库目录。该加载器在此目录里面查找并加载java类
  • 提供sun.misc.Launcher$EXxtClassLoader 实现类

应用程序类加载器

  • 组合于扩展类加载器
  • 继承于抽象类ClassLoader
  • 它根据java应用的类路径(classPath,java.class.path)
  • 一般来说应用程序都由它来完成加载
  • sun.misc.Launcher$EXxtClassLoader 实现类

自定义类加载器

  • 继承于抽象类java.lang.ClassLoader
  • 开发人员通过i继承jav.lang.ClassLoader
  • 类的方式实现自己的类加载器