类的加载机制
来源:互联网 发布:推荐几本好看的书 知乎 编辑:程序博客网 时间:2024/06/08 07:25
jvm中有多个类加载器,每个类加载器负责加载指定位置的类。
Java源代码(.java)在经过java编译器编译之后生成java字节码(.class),类加载器负责加载java字节码到jvm中,并转换成java.lang.Class类的一个实例。
例:bootstrap类加载器(原生代码实现,c++)负责加载jre/lib/rt.jar中的类,extclassloader负责加载jre/lib/ext/*.jar中的类,appclassloader负责加载classpath指定位置的类。
获取系统类加载器:ClassLoader中的getSystemClassLoader()方法
当jvm加载第一个类时,由当前线程的上下文类加载器加载(默认为系统类加载器),如果类A中引用了类B,使用加载类A的加载器加载B(调用加载器的load方法)。
线程上下文类加载器:每个线程对象有一个线程上下文类加载器对象(默认为系统类加载器)
双亲委派模型: -->运行期加载
如果一个类加载器收到了类加载的请求,它首先不会自己尝试加载这个类,而是把这个请求委派给父类加载器完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都传送到启动类加载器中,只有当父加载器无法完成加载请求时,子加载器才会尝试自己去加载。
比较两个类是否”相等”,只有在这两个类是由同一个类加载加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,只要加载它们的类加载器不同,那这两个类必定不相等。
类加载过程:1.加载 JVM加载类文件的二进制字节流到方法区,在堆中生成一个
java.lang.Class对象,作为方法区这些数据的访问入口
2.验证 和加载交叉进行,确保类文件的二进制字节流符合要
求。(非法类型转换、继承不允许继承的类等)
3.准备 为类变量分配内存,并设置默认初始值
4.解析 将符号引用解析为直接引用
5.初始化
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类加载器的加载机制
- java的类加载机制
- tomcat的类加载机制
- java的类加载机制
- Java的类加载机制
- 类的加载机制 1
- eclipse 离线安装插件报cannot perform operation.Computing alternate solutions...解决办法
- STM32F429HAL库定时器学习笔记
- 练习
- 51Nod 1004 n^n的末位数字(快速幂)
- matlab2c使用c++实现matlab函数系列教程-save函数
- 类的加载机制
- Tue Sep 12 17:53:30 CST 2017与Tue Sep 12 17:53:30 CST 2017 GMT+0800的区别
- 检测委托线程的结束_通过等待句柄和回调函数
- 文章标题
- 网络编程
- mybatis和hibernate
- iServer DataStore的部署与使用
- 侧滑菜单与轮播图的冲突
- MATLAB求出不可约多项式(实现二进制加法、除法)