JVM类加载器
根加载器
根加载器又被称为Bootstrap类加载器,该类加载器是最顶层的加载器,由c++编写,.主要负责虚拟机核心类库的加载, 例如java.lang包下的类都是根加载器加载, 可以通过 -Xbootclasspath来指定根加载器的路径,根加载器的加载路径可以通过sun.boot.class.path系统属性获得, 并且根加载器的引用是获取不到的, 如下
public class BootstrapClassLoader {
public static void main(String[] args) {
//输出根类加载器加载的路径
System.out.println(System.getProperty("sun.boot.class.path"));
//输出为 null, 因为获取不到引用
System.out.println("Bootstrap:" + String.class.getClassLoader());
}
}
以下为控制台输出
D:\work\JAVA\JDKJRE\jre\lib\resources.jar;
D:\work\JAVA\JDKJRE\jre\lib\rt.jar;
D:\work\JAVA\JDKJRE\jre\lib\sunrsasign.jar;
D:\work\JAVA\JDKJRE\jre\lib\jsse.jar;
D:\work\JAVA\JDKJRE\jre\lib\jce.jar;
D:\work\JAVA\JDKJRE\jre\lib\charsets.jar
;D:\work\JAVA\JDKJRE\jre\lib\jfr.jar;
D:\work\JAVA\JDKJRE\jre\classes
Bootstrap:null
扩展加载器
扩展加载器的父加载器是根加载器,主要加载JDK所在的文件的jre/lb/ext目录里面的类库,由java语言编写,继承java.lang.URLClassLoader, 加载的类库可以通过系统属性java.ext.dirs获得, 这跟上述代码是一样的,就不给例子了, 并且我们也可以将自己写的jar包放置在扩展类加载器的加载路径之中, 让其的加载器变为扩展类加载器( 一般为系统类加载器)
系统类加载器
系统类加载器的父加载器是扩展类加载器,其负责加载classpath下的类库资源,是我们常见的加载器.
系统类加载器的加载路径一般通过-classpath或者-cp指定,也可以通过系统属性java.class.path进行获取.例如
public class SystemClassLoader {
public static void main(String[] args) {
System.out.println(System.getProperty("java.class.path"));
System.out.println(SystemClassLoader.class.getClassLoader());
}
}
控制台打印
D:\work\JAVA\JDKJRE\jre\lib\charsets.jar;D:\work\JAVA\JDKJRE\jre\lib\deploy.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\access-bridge-64.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\cldrdata.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\dnsns.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\jaccess.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\jfxrt.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\localedata.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\nashorn.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\sunec.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\sunjce_provider.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\sunmscapi.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\sunpkcs11.jar;D:\work\JAVA\JDKJRE\jre\lib\ext\zipfs.jar;D:\work\JAVA\JDKJRE\jre\lib\javaws.jar;D:\work\JAVA\JDKJRE\jre\lib\jce.jar;D:\work\JAVA\JDKJRE\jre\lib\jfr.jar;D:\work\JAVA\JDKJRE\jre\lib\jfxswt.jar;D:\work\JAVA\JDKJRE\jre\lib\jsse.jar;D:\work\JAVA\JDKJRE\jre\lib\management-agent.jar;D:\work\JAVA\JDKJRE\jre\lib\plugin.jar;D:\work\JAVA\JDKJRE\jre\lib\resources.jar;D:\work\JAVA\JDKJRE\jre\lib\rt.jar;E:\javaResource\ThreadLearn\out\production\ThreadLearn;D:\work\Builder\IntelliJ IDEA 2019.2\lib\idea_rt.jar
sun.misc.Launcher$AppClassLoader@18b4aac2
太多,懒得格式下了~.