8类加载器案例剖析

Posted sunhao1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8类加载器案例剖析相关的知识,希望对你有一定的参考价值。

8.1、使用ClassLoader类中的getParent()方法获取父类加载器

package com.shtec.classLoader;

/**
 * 使用ClassLoader类中的getParent()方法获取父类加载器
 * 注意:根类加载器是由C++编写的,其对象为null;
 * @author sunhao
 *
 */
public class Test04 {
    
    public static void main(String[] args) {
        //获得【系统类加载器】
        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
        System.out.println("系统类加载器: " + classLoader);
        //依次获取【扩展类加载器】、【根类加载器】
        while(classLoader != null){
            classLoader = classLoader.getParent();
            System.out.println(classLoader);
        }
        //输出:
        /*
         * 系统类加载器: sun.misc.Launcher$AppClassLoader@73d16e93
         * sun.misc.Launcher$ExtClassLoader@15db9742
         * null
         */
    }
}

8.2、根据字节码的路径获取资源信息

package com.shtec.classLoader;

import java.io.IOException;
import java.net.URL;

/**
 * 根据字节码的路径获取资源信息
 * @author sunhao
 *
 */
public class Test05 {

    public static void main(String[] args) throws IOException {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        String resourceName = "com/shtec/classLoader/Test05.class";
        URL url = classLoader.getResource(resourceName);
        System.out.println(url);
        //输出:
        //file:/D:/workspace_m/jvm/target/classes/com/shtec/classLoader/Test05.class
    }
}

8.3、获取加载普通类和String类的类加载器

package com.shtec.classLoader;

/**
 * 获取加载普通类和String类的类加载器
 * @author sunhao
 *
 */
public class Test06 {
    
    public static void main(String[] args) throws Exception {
        //加载普通类的类加载器----->AppClassLoader
        Class<?> clazz = Test06.class;
        System.out.println(clazz.getClassLoader());
        
        //加载String类的类加载器----->根类加载器
        clazz = Class.forName("java.lang.String");
        System.out.println(clazz.getClassLoader());
        
        //输出:
        /*
         * sun.misc.Launcher$AppClassLoader@73d16e93
         * null
         * 
         */
    }
}

以上是关于8类加载器案例剖析的主要内容,如果未能解决你的问题,请参考以下文章

打破双亲委派JVM:类加载机制深度剖析 - 第8篇

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

jdk源码剖析

6类加载器深入解析与重要特性剖析

4.JVM类加载器深入解析及重要特性剖析

jvm原理(23)线程上下文类加载器实战分析与难点剖析