jvm学习-ClassLoader(二)
ClassLoader结构
jdk加载的4个步骤
CustomClassLoader 用户自定义的classLoader
APPClassLoader主要加载classPath下面的class
Extension ClassLoader 主要负责加载JAVA_HOME/jre/lib/ext/目下的所有jar
BootStrap ClassLoader:负责加载JDK中的核心类库,如:rt.jar、resources.jar、charsets.jar等
java类加载器采用双亲委托模式
则是从下级往上级询问是否有加载。如果没加载 再从上级往下下级查找 如果找到就加载 没有找到就继续向下询问
比如 在程序创建一个Test类。然后在main方法打印这个这个Test类的classLoader 会打印 APPClassLoader
因为appClassLoader会逐个向上询问是否加载 则都没有加载 然后从上级bootstrap到Extension ClassLoader会在他的扫描的jar里面找有没有Test这个class都没有找到 最终APPClassLoader在classPath找到这个类 加载
我们改变一下程序 将Test类打包成一个jar 放到ext目录下
再次打印则会输出加载类是Extension ClassLoader
双亲委托模式的好处
1. 防止重复加载
缺点 :
上层类加载器无法获得下层类加载器加载的类
双亲委托模式是jdk的默认实现 但是不一定要完全按照这个模式
比如tomcat webappClassLoader 就会先加载自己的class 找不到再委托父类
自定义ClassLoader 必须继承 classLoader类
classLoader的重要方法
loadClass(String name)文件名字
最新文章
- centos下ssh无密码验证
- 2795: [Poi2012]A Horrible Poem
- MarkMan – 马克鳗,让设计更有爱!
- 对java多线程的认识
- word文档标题级别批量更改——批量降级与升级实例
- OpenJudge 2680 化验诊断 C++
- 从头开始学JavaScript (五)——操作符(二)
- iOS自定义转场动画的实现
- dock使用方法
- typescript 安装
- 【Common】-NO.122.common.1 - pv、uv、ip,tps、qps、rps术语
- .NET SQLServer数据库转MySql
- Linux命令之nohup和重定向
- 第十七章 java8特性
- Scala进阶之路-Spark独立模式(Standalone)集群部署
- C# 部分类使用partial修饰
- 176条DevOps人员常用的linux命令速查表
- zabbix的启动和关闭脚本
- Java-idea-eclipse-快捷键【mac,win】
- POJ1062不错的题——spfa倒向建图——枚举等级限制
热门文章
- bzoj4397【Usaco2015 Dec】Breed Counting
- case when in sql server's stored procedure
- 3n+1问题
- hdoj--5619--Jam's store(最小费用最大流)
- 【POJ 2248】 Addition Chain
- 排序系列 之 归并排序算法 —— Java实现
- Gym - 101981A The 2018 ICPC Asia Nanjing Regional Contest A.Adrien and Austin 简单博弈
- 网络简要<;入门篇>;对应配置代码
- Redis的事务讲解
- jQuery获取及设置单选框、多选框、文本框