Java中的类加载器

Java 中的类加载器大致可以分成两类:

一类:是系统提供的;

另一类:是由Java 应用开发人员编写的。

第一种:系统提供的类加载器主要有下面三个:

引导类加载器(bootstap class loader):

它用来加载 Java 的核心库,是用原生代码来实现的,并不继承java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath选项制定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

扩展类加载(extensions class loaser):

它用来加载Java的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里里面查找并加载Java类,主要负责jdk_home/lib/ext目录下后者 -Djava.ext.dirs 指定目录下的jar包装入工作。

系统类加载器(system class loader):

它根据Java应用的类路径(CLASSPATH)来加载Java类,java应用的类都是有它来完成加载。可以通过ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作。

第二种:Java 应用开发人员编写的

除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;

对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

Java中的类加载器_第1张图片

你可能感兴趣的:(JVM,学习)