jdk 几个内置的classloader的加载路径

361 阅读1分钟

jdk 几个内置的classloader的加载路径

源程序

import java.util.concurrent.locks.LockSupport;

public class ClassloadTest {
    public static void main(String[] args) {
        LockSupport.park();
    }
}

如何分析

  1. jps找到对应的pid

  2. 执行jmap命令

    F:\gitee-ckl\all-simple-demo-in-work-1>jmap -dump:live,format=b,file=heap3456.bi
    n pid
    

    然后就拿到了堆转储文件,我这边文件名为heap3456.bin

然后使用mat(eclipse memory analyzer )打开该文件。

这里查出来,就是默认的appclassloader。

上面红框,就是appclassloader的加载路径。

那么,其parent classloader的加载路径呢?

parent为:

bootStrap的呢?

extclassloader的parent为null,看不到了

可以通过如下的demo去查看:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.print(System.getProperty("sun.boot.class.path"));
        
    }
}

我这边的输出如下:

C:\Program Files\Java\jdk1.8.0_11\jre\lib\resources.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\lib\rt.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\lib\sunrsasign.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\lib\jsse.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\lib\jce.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\lib\charsets.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\lib\jfr.jar;
C:\Program Files\Java\jdk1.8.0_11\jre\classes

其他分析方法

可以使用阿里的arthas试试,我这里就不分析了。