类加载器ClassLoader

本文介绍了Java虚拟机启动时形成的类加载器层次结构,包括引导类加载器、扩展类加载器和应用程序类加载器的工作原理及职责范围。引导类加载器负责加载核心类库,扩展类加载器负责加载扩展目录中的jar包,而应用程序类加载器则负责加载用户程序的类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类加载器负责将.class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象。当JVM启动时,会形成有三个类加载器组成的初始化类加载器层次结构。如下:

JAVA虚拟机起来时,首先会通过BootStrap类装载器加载JRE/lib/rt.jar的类。此类装载器也叫引导(原始 )类加载器,它负责加载java核心类。这个加载器是非常特殊的,它实际上不是java.lang.ClassLoader的子类,而是有JVM自身实现的。可以通过执行以下代码来获取bootstrap classloader加载了哪些核心类库:

URL[] urls=sum.misc.Launcher.getBootpstrapClassPath().getURLs();

for(int i=0; i<urls.length; i++)

{

System.out.println(urls[i].toExternalForm());

}

由于JVM在启动时它就会自动加载它们,所以不需要在系统属性CLASSPATH中指定这些类库。

extension classloader扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者有java.ext.dirs系统属性指定的)中的jar包。这为引入除java核心类以外的新功能提供一个标准机制。因为默认的扩展目录对所有重同一个JRE中启动的JVM都是通用的,所以放入这个目录的JAR类包对所有的JVM和system classloader都市可见的。


我们一般写的程序是由AppClassLoader类装载器进行装载。此类装载器,也叫系统类加载器,它负责JVM启动时,加载来自在命令java中的-classpath或者java.class.path系统属性活则CLASSPATH操作系统属性所指定的JAR类包和类路径。

可以通过静态方法。ClassLoader.getSystemClassLoader()找到该类加载器。如果没有特别指定,则用户自动以的任何类加载器都将该类加载器做为父类加载器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值