类加载器
作用
将class文件字节码文件加载到内存中,并将这些静态数据转换为方法区中运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区数据的访问入口。这样JVM就可以使用该类。
类加载器树状结构
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
- 类的方式实现自己的类加载器