类加载器(ClassLoader)
1. 类加载器概述
1.1 类加载器的作用
- 把 .class 文件加载到 JVM 的方法区中,变成一个 Class 对象!
1.2 类加载器分类
- 类加载器也是一个类:
ClassLoader; - Java 提供了三种类加载器:
- 引导类加载器, 加载 java 自己的类库, 即 rt.jar 中的类;
- 扩展类加载器, 加载扩展 jar 包, 即 lib/ext 目录下的类;
- 系统类加载器, 加载 classpath 下的类, 包含开发人员写的类,和第三方的 jar 包.
- 类加载器之间存在上下级关系,系统类加载器的上级是扩展类加载器, 而扩展类加载器的上级是引导类加载器.
2. 类加载器的委托机制
- 代码中出现这么一行:
new A();- 系统发现了自己加载的类, 其中包含了
new A(), 这说明需要系统去加载 A 类; - 系统会给自己的领导打电话, 让扩展去自己的地盘去加载 A 类;
- 扩展会给自己的领导打电话, 让引导区自己的地盘去加载 A 类;
- 引导自己真的区
rt.jar中寻找 A 类- 如果找到了, 那么加载之,然会返回 A 对应的 Class 对象给扩展, 扩展也会把这个 Class
返回给系统, 这样,类加载就结束了. - 如果没有找到, 引导给扩展返回一个 null, 扩展会自己去自己的地盘,去寻找 A类;
- 如果找到了, 那么加载之,然后返回 A 对应的 Class 对象给系统,这样, 类加载就结束了;
- 如果没有找到,扩展返回一个 null 给系统, 系统去自己的地盘(应用程序下)加载 A 类;
- 如果找到了, 那么加载之, 然后返回这个 Class 对象, 类加载就结束了;
- 如果没找到, 则抛出异常
ClassNotFoundException
- 如果找到了, 那么加载之,然会返回 A 对应的 Class 对象给扩展, 扩展也会把这个 Class
- 系统发现了自己加载的类, 其中包含了
3. Tomcat 的类加载器
3.1 Tomcat 提供两种类加载器
- 服务器类加载器: 它负责加载
${CATALINA_HOME}/lib目录下的类; - 应用类加载器: 它负责加载
${CONTEXT_HOME}/WEB-INF/lib和${CONTEXT_HOME}/WEB-INF/classes目录下的类;
3.2 特性
- 服务类加载器: 先自己动手,然后再去委托;
- 应用类加载器: 先自己动手,然后再去委托;
- Tomcat 类加载器优先级(由高到低)
- 应用下的 classes, 应用类加载器
- 应用下的 lib, 应用类加载器
- 服务器下的 lib, 服务器类加载器
参考资料:
类加载器(ClassLoader)的更多相关文章
- Java虚拟机学习(5):类加载器(ClassLoader
类加载器 类加载器(ClassLoader)用来加载 class字节码到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源文件在经过 Javac之后就被转换成 ...
- 深入理解Java类加载器(ClassLoader)
深入理解Java类加载器(ClassLoader) Java学习记录--委派模型与类加载器 关于Java类加载双亲委派机制的思考(附一道面试题) 真正理解线程上下文类加载器(多案例分析) [jvm解析 ...
- 深入理解Java类加载器(ClassLoader) (转)
转自: http://blog.csdn.net/javazejian/article/details/73413292 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Ja ...
- jvm之java类加载机制和类加载器(ClassLoader),方法区结构,堆中实例对象结构的详解
一.类加载或类初始化:当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载.连接.初始化3个步骤来对该类进行初始化.如果没有意外,JVM将会连续完成3个步骤. 二.类加载时机: 1 ...
- Java 类加载器(ClassLoader)
类加载器 ClassLoader 什么是类加载器? 通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现, 以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代 ...
- 类加载器ClassLoader的理解
最近在做一个热加载Class的小组件,这个组件需要对类加载器ClassLoader有所了解,我就顺便借这个机会把学到的一点皮毛与大家分享一下. 从Class文件开始 ClassLoader,顾名思义就 ...
- 类加载器ClassLoader
上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...
- 类加载器ClassLoader之jar包隔离
小引子 最近做了一个根据同一模块的不同jar版本做同时测试的工具,感觉挺有意思,特此记录. 类加载器(ClassLoader)是啥? 把类加载阶段中的"通过一个类的全限定名(博主注:绝对路径 ...
- 浅析java类加载器ClassLoader
作为一枚java猿,了解类加载器是有必要的,无论是针对面试还是自我学习. 本文从JDK提供的ClassLoader.委托模型以及如何编写自定义的ClassLoader三方面对ClassLoader做一 ...
- Java中的类加载器----ClassLoader
1.简单的讲类加载器就是加载类. 在一个类要被执行时,首先会被从硬盘中加载到内存中,这个任务就是由类加载器来完成,如果加载不成功时,类是无法被执行的.类加载器执行的都是字节码二进制文件. 帮助文档 ...
随机推荐
- React Native :加载新闻列表
代码地址如下:http://www.demodashi.com/demo/13212.html 标签与内容页联动 上一节(React Native : 自定义视图)做到了点击标签自动移动,还差跟下面的 ...
- ibatis 动态列查询问题解决
http://hi.baidu.com/java513/blog/item/ace7c516c400390d4a90a7c8.html 这个问题是因为你查询的sql的列是变化的,但是ibati ...
- spring事务管理源码解析--加了@Transactional注解后Spring究竟为我们做了哪些事情?
大家都知道事务管理是基于AOP的,对AOP还不了解的请自行百度. 实现一个事务需要以下几步:1.获取数据库连接 2.执行数据库操作 3.如果2步骤发生异常就回滚,否则就提交 4.释放资源. 然后 ...
- 数组传到后台 string[] 获取
调试的 时候js 断点到后台 js上面也可以查看 传到后台的数据 方便查看~~
- RabbitMQ 学习笔记(一)特点
RabbitMQ 的具体特点 可靠性: RabbitMQ 使用一些机制来保证可靠性, 如持久化.传输确认及发布确认等. 令灵活的路由: 在消息进入队列之前,通过交换器来路由消息.对于典型的路由功能,R ...
- tcp/ip ---IP路由选择
从概念上说, I P路由选择是简单的,特别对于主机来说.如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么I P数据报就直接送到目的主机上.否则,主机把数据报发 ...
- webpack 通用环境快速搭建
能用babel编译es2015 . 能热编译.能加载静态资源(js/css/font/image).是一个很通用的开发环境,虽然不智能.但很好扩展 npm 安装列表: # webpack 核心 npm ...
- Android中图片的三级缓存策略
在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...
- MVC 实现表格数据导出Excel(NPOI方式)
前端View(@ViewBag为查询条件): <span id="exprobtn" class="btn_blue" style="dispa ...
- ToString(string format)输出格式简述
ToString说明 ToString 是 .NET Framework 中主要的格式化方法.它将对象转换为其字符串表现形式,使它适合于显示.(有关对 .NET Framework 中的格式设置支持的 ...