JVM学习笔记21——类加载器实战剖析与疑难点解析
发布日期:2021-06-29 01:18:58 浏览次数:2 分类:技术文章

本文共 1512 字,大约阅读时间需要 5 分钟。

查看各类加载器的加载路径:

// 查看加载器位置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"));
public class MyTest18_1 {    public static void main(String[] args) throws Exception{        MyTest16 loader1 = new MyTest16("loader1");        loader1.setPath("D:\\workspace\\");        Class
clazz = loader1.loadClass("com.yshuoo.jvm.classloader.MyTest1"); System.out.println("class: " + clazz.hashCode()); System.out.println("class loader:" + clazz.getClassLoader()); }}

将MyTest1放入启动类加载器能加载的路径里,最后就会有启动类加载器加载MyTest1

扩展类加载器主要是加载一些加密解密的类

public class MyTest19 {    public static void main(String[] args) {        AESKeyGenerator aesKeyGenerator = new AESKeyGenerator();        System.out.println(aesKeyGenerator.getClass().getClassLoader());        System.out.println(MyTest19.class.getClassLoader());    }}

修改扩展类加载器的加载路径为当前路径

java -Djava.ext.dirs=./ com.yshuoo.jvm.classloader.MyTest19

运行会发生异常,说明加载路径都是固定的

public class MyPerson {    private MyPerson myPerson;    public void setMyPerson(Object myPerson) {        this.myPerson = (MyPerson)myPerson;    }}
MyTest16 loader1 = new MyTest16("loader1");MyTest16 loader2 = new MyTest16("loader2");Class
clazz1 = loader1.loadClass("com.yshuoo.jvm.classloader.MyPerson");Class
clazz2 = loader2.loadClass("com.yshuoo.jvm.classloader.MyPerson");System.out.println(clazz1 == clazz2);

输出为true,尽管loader1和loader2是不同的加载器实例,但是都会委托应用类加载器去加载MyPerson

转载地址:https://blog.csdn.net/yshuoo/article/details/116530421 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JVM学习笔记22——类加载器命名空间深度解析与实例分析
下一篇:JVM学习笔记20——类加载器命名空间实战剖析与透彻理解

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月01日 13时50分54秒