java中的classloader

本文详细介绍了Java中ClassLoader的概念及其分类,包括bootstrap classloader、extension classloader和application classloader,并通过一个小程序展示了如何测试不同类加载器的加载过程。

JavaClassLoader不止一个,最核心的是bootstrap classlaoder,这个classloadernative language实现的,负责加载jdk的一些核心类,这些类加载到堆里面的永久区(permanent space),也负责加载其他的classloader,我们不能通过反射拿到这个classloader的名字的,其他都可以。

还有extension classloader,它负责加载jre/lib/ext下面的jar包中的类。

用户自定义的类是通过application classloader加载的,可以直接通过ClassLoader.getSystemClassLoader()拿到本类的classloader

通过查看java api可以发现,所有的classloader都继承了java.lang.ClassLoader这个抽象类,如它的直接子类SecureClassLoader,以及SecureClassLoader的子类URLClassLoader等。

通过下面的小程序测试不同的classloader

public class TestJDKClassLoader {
	public static void main(String[] args) {
		//jdk的一些核心类是被bootstrap classloader加载的,不能拿到它的名字
		System.out.println(String.class.getClassLoader());
		//这个是jre/lib/ext/下的包中一个类,它的classloader名字叫ExtClassLoader
		System.out.println(sun.net.spi.nameservice.dns.DNSNameService.class
				.getClassLoader().getClass().getName());
		//自定义的类的classloader为AppClassLoader
		System.out.println(TestJDKClassLoader.class.getClassLoader().getClass()
				.getName());
	}
}

运行结果如下:

null
sun.misc.Launcher$ExtClassLoader
sun.misc.Launcher$AppClassLoader


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值