博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 双亲委派机制 的思考
阅读量:6836 次
发布时间:2019-06-26

本文共 1301 字,大约阅读时间需要 4 分钟。

先上图,看一下加载器。

151224_tHEL_1990220.png

1、BootStrapClassLoader:启动类加载器,该ClassLoader是在启动时候创建的,是写在JVM内核里的,它不是一个字节码文件,是由c++编写的二进制代码,所以开发者无法获取到该启动类的引用,也就不能通过引用来进行操作。这个加载器是加载$JAVA_HOME/jre/lib下面的类库(或者通过参数-Xbootclasspath指定)。

2、EXTClassLoader:扩展类加载器,ExtClassLoader会加载 $JAVA_HOME/jre/lib/ext下的类库(或者通过参数-Djava.ext.dirs指定)。

3、AppClassLoader:应用程序加载器,会加载java环境变量CLASSPATH所指定的路径下的类库,而CLASSPATH所指定的路径可以通过Systemn.getProperty("java.class.path")获取,该变量可以覆盖。

4、CustomClassLoader:自定义加载器,就是用户自己定义的CLassLoader,比如tomcat的standardClassLoader属于这一类。

ClassLoader双亲委派机制:

1、当APPClassLoader加载一个class时,它首先不会自己去加载这个类,而是把类加载请求委派给父类加载器EXTClassloader去完成。

2、当EXTClassLoader加载一个class时,它首先不会去尝试加载这个类,而是把类加载请求委派给BootStrapClassLoader去完成。

3、如果BottStrapClassLoader加载失败,会使用EXTClassLoader去尝试加载。

4、若EXTClassLoader也加载失败,则会使用APPClassLoader来加载,如果APPClassLoader也加载失败,则会报出异常ClassNotFundException.

委派机制具体含义和意义:

当java虚拟机要加载一个类时,到底要排除哪个类加载器去加载呢?

比如:当前线程的类加载器要去加载线程中一个类A,如果这个类A中引用了类B,java虚拟机将使用加载类A的加载器去加载类B。类B再使用的时候如果发现类B已经加载了,就不去加载这个类B了。

我觉得其意义是防止内存中出现多份同样的字节码。

如果不用委托而是自己加载自己的,那么类A就会加载一份System字节码,然后类B又会加载一份System字节码,这样内存中就出现了两份System字节码。

如果使用委托机制,会递归的向父类查找,也就是首选用Bootstrap尝试加载,如果找不到再向下。这里的System就能在Bootstrap中找到然后加载,如果此时类B也要加载System,也从Bootstrap开始,此时Bootstrap发现已经加载过了System那么直接返回内存中的System即可而不需要重新加载,这样内存中就只有一份System的字节码了。

 

本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1923698

转载地址:http://kphkl.baihongyu.com/

你可能感兴趣的文章
history的详解与使用
查看>>
随机数
查看>>
【入门须知】学DIV CSS技术如何入门?
查看>>
Bullmind在线读书笔记软件
查看>>
wince 6.0 串口 读取 readfile 超时问题
查看>>
代码片段
查看>>
单例模式
查看>>
awk用法(三)
查看>>
谷歌深度学习公开课任务 5: Word2Vec&CBOW
查看>>
让Python不在mac的dock上显示火箭图标
查看>>
Oracle 数据库EM访问多个Instance
查看>>
理解 Delphi 的类(十) - 深入方法[28] - 递归函数实例: 搜索当前目录下的所有嵌套目录...
查看>>
前端纪实
查看>>
学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS
查看>>
WinAPI: GetLocalTime、SetLocalTime、SetSystemTime - 获取与设置系统时间
查看>>
关于 Delphi 中流的使用(6) 用流读写结构化文件
查看>>
复杂的结构化存取(一)
查看>>
web前端性能优化
查看>>
如何通过jq和php实现返回父级页面(附带记忆功能)
查看>>
Centos下运行gpg --gen-key生成key时出现卡住解决方案笔记
查看>>