【转】理解Java ClassLoader机制
当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构:
bootstrap classloader
|
extension classloader
|
system classloader
bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。在Sun的JVM中,在执行java的命令中使用-Xbootclasspath选项或使用 - D选项指定sun.boot.class.path系统属性值可以指定附加的类。这个加载器的是非常特殊的,它实际上不是 java.lang.ClassLoader的子类,而是由JVM自身实现的。大家可以通过执行以下代码来获得bootstrap classloader加载了那些核心类库:
static class Launcher$AppClassLoader extends URLClassLoader{public static ClassLoader getAppClassLoader(ClassLoader classloader)throws IOException{//获得系统属性“java.class.path”String s = System.getProperty("java.class.path");File afile[] = s != null ? Launcher.access$200(s) : new File[0];return (Launcher$AppClassLoader)AccessController.doPrivileged(new Launcher$2(s, afile, classloader));}}