Class加载机制——加载器类型

本文介绍了Java虚拟机(JVM)中的三种类加载器:引导类加载器、扩展类加载器和系统类加载器的工作原理及特点。通过实例演示了如何获取类的加载器,并探讨了类加载器的应用。

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

[align=center][size=xx-large][b]Class加载机制——加载器类型[/b][/size][/align]

[size=medium] 在JVM中有三种类型的Class加载器,如图所示:[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0084/6760/aced5ff5-ebcb-3e16-94cf-a44b0d84b094.jpg[/img][/align]
[size=medium]
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用C++实现的,我们无法访问到。

扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。是用Java来实现的。

系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()来获取它。[/size]

[size=large][b]一、三个加载器工作流程[/b][/size]
[size=medium]1、一个Class加载,先从引导类加载器开始,如果引导类加载器不能加载则交给扩展加载器;
2、如果扩展类加载器不能加载再交给系统类加载器(也称为应用类加载器);
3、直到加载成功。[/size]

[size=large][b]二、加载器的特点[/b][/size]
[size=medium]1、可以决定一个Class的加载过程;

2、相同全名称的两个类,可以通过使用不同加载器来共存在内存中;

3、引导类加载器很好的保护了Java核心类不受干扰;[/size]


[size=large][b]三、获取Class的加载器[/b][/size]
[size=medium]实例:[/size]
package com.sean.jvm;

public class Test01 {
public static void main(String[] args) {
try {
Class clas1 = Class.forName("java.lang.String");
Class clas2 = Class.forName("com.sean.jvm.Test01");
System.out.println("clas1-->" + clas1.getClassLoader()+"就是");
System.out.println("clas2-->" + clas2.getClassLoader());
System.out.println("clas2的父级加载-->"+ clas2.getClassLoader().getParent());
System.out.println("clas2的父级的父级加载-->"+ clas2.getClassLoader().getParent().getParent());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}


[size=medium]输出结果:
clas1-->null
clas2-->sun.misc.Launcher$AppClassLoader@281d4b
clas2的父级加载-->sun.misc.Launcher$ExtClassLoader@19b5217
clas2的父级的父级加载-->null[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0084/6766/52365013-6c51-3bd0-adc4-36624d45ce00.jpg[/img][/align]

[size=medium]我们可以根据java.lang.Class<T>类中的getClassLoader() API文档可知,当返回的是Null时,表示采用了引导类加载器。[/size]

[size=large][b]四、ClassLoader的应用[/b][/size]
[size=medium]1、可以决定自己的Class的加载过程
2、可以给Class加密,防止反编译[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值