资料内容:
1 JVM中的ClassLoader
JVM中有3个默认的类加载器:
引导(Bootstrap)类加载器。用C/C++写的,在Java代码中无法获取到。主要是加载存储在
<JAVA_HOME>/jre/lib 目录下的核心Java库,对应的加载路径是 sun.boot.class.path 。
扩展(Extensions)类加载器.用来加载 <JAVA_HOME>/jre/lib/e。t 目录下或者对应的加载路径
java.ext.dirs 中指明的Java扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在
此目录里面查找并加载 Java 类。该类由 sun.misc.Launcher$ExtClassLoader 实现。
Apps类加载器(也称系统类加载器)。根据 Java应用程序的类路径(java.class.path或
CLASSPATH环境变量)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通
过 ClassLoader.getSystemClassLoader() 来获取它。该类由
sun.misc.Launcher$AppClassLoader 实现,它的parent类加载器是ExtClassLoader。
下面通过一个示例来看一下:
package classLoader;
public class ClassLoaderTest {
public static void main(String[] args) {
ClassLoaderTest clt=new ClassLoaderTest();
ClassLoader cl=clt.getClass().getClassLoader();
System.out.println(cl);
System.out.println(cl.getParent());
System.out.println(cl.getParent().getParent());
System.out.println(ClassLoader.getSystemClassLoader());
System.out.println(System.getProperty("sun.boot.class.path"));
System.out.println(System.getProperty("java.ext.dirs"));
System.out.println(System.getProperty("java.class.path"));
}
}