Java虚拟机类加载器之双亲委派机制模型案例

网友投稿 344 2022-10-07


Java虚拟机类加载器之双亲委派机制模型案例

1. 双亲委派模型是什么?

当某个类加载器需要加载某个.class字节码文件时,它首先把这个任务委托给它的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。

2. 双亲委派模型的工作原理?

1.如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去执行;

2.如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;(每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中。)

3.如果父类加载器可以完成类加载任务,就成功返回;倘若父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。

以上便是双亲委派模型的工作原理。

双亲委派模型对于保证java程序的稳定运作极为重要,但它的实现却异常简单,用以实现双亲委

派的代码只有短短十余行,全部集中在java.lang.ClassLoader的loadClass()方法之中。

双亲委派模型的核心代码:

protected Class> loadClass(String name, boolean resolve) throws ClassNotFoundException

{

synchronized (getClassLoadingLock(name)) {

// 首先,检查这类是否已经被加载过了

Class> c = findLoadedClass(name);

if (c == null) {

long t0 = System.nanoTime();

try {

if (parent != null) {

//如果存在父类加载器,则取找该类的父类加载器

http:// c = parent.loadClass(name, false);

} else {

//返回由引导类加载器加载的类;如果未找到,则返回 null。

c = findBootstrapClassOrNull(name);

}

} catch (ClassNotFoundException e) {

// 如果父类加载器抛出ClassNotFoundException异常

// 则说明父类加载器无法完成加载请求

}

FbCMzR

if (c == null) {

// 在父类加载器无法加载时

// 再调用本身的findClass方法来进行加载

long t1 = System.nanoTime();

c = findClass(name);

// 这是定义类加载器;记录统计数据

sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);

sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);

sun.misc.PerfCounter.getFindClasses().increment();

}

}

if (resolve) {

resolveClass(c);

}

return c;

}

}

这段源码逻辑:

1.首先,检查请求加载的类型是否已经被加载,倘若没有则调用父类加载器loadClass()方法;

2.如果父类加载器为空,则默认使用启动类加载器作为父加载器。

3.如果父类加载器加载失败,抛出ClassNotFoundException异常,这时候才调用自己的findClass()方法尝试进行加载。

可参考网上的双亲委派模型流程图:

3. 双亲委派机制的优势?

1.保证基础类仅加载一次,不会让JVM中存在重名的类。

防止重复加载同一个.class文件,比如String.class,每次加载都委托给父加载器,最终都是BootstrapClassLoader,都保证java核心类都是BootstrapClassLoader加载的,加载过了,就不用再加载一遍,保证了java的安全与稳定性。

2.保护程序安全,防止核心.class文件被随意篡改。

通过委托方式,不会去篡改核心.class,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Nmap实用专题系列(二)利用端口扫描进行终端合规性检查的一个示例
下一篇:华三防火墙F100-m-g恢复出厂设置后无法web访问管理页面(华三防火墙f100怎么进web)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~