JVM学习笔记5—类加载器(classloader)
2016-02-24 00:15
246 查看
class装载验证流程
1 加载
· 取得类的二进制流,转为方法区数据结构,在堆中生成相应的java.lang.Class对象2 链接
(1)验证(文件格式验证,元数据验证,字节码验证,符号引用验证)
保证Claas流的格式是正确的,防止被恶意替换(2)准备
分配内存,并为类设置初始值(在方法区中)注意 public static int a=1,在准备阶段,v=0,而不是1
(3)解析
符号引用替换为直接引用,因为在编译时java类并不知道引用类的实际地址,只能通过符号引用来代替,而在类装载的过程时,此时可以通过JVM知道所引用的类的实际内存地址,转化为了直接地址引用,例如 cn.edu.ustc.car类引用了cn.edu.ustc.tools这个类,在car这个类编译的时候,其并不知道tools类的实际内存
地址,只能用符号引用表示,而在car类装载的时候,可以通过JVM得tools类的实际内存地址,此时转化为直接地址引用
3 初始化
执行类构造器<.clinit> 准备过程中的注意 那块a此时被初试化为1,clinit是线程安全的,在调用子类clinit之前必须保证父类的clinit已经被调用了classloader的定义
classloader是一个抽象类classloader的实例将读入java字节码,并将类装载到JVM中
classloader是可以直接定义的
classloader辅助类加载过程中的加载阶段
classloader默认设计模式(父委托机制)
classloader的架构共分为四层从上往下是: 根加载器--->拓展加载器---->系统加载器----->自定义加载器
所谓的父委托机制就是,一个类优先由上层加载器进行加载。
例如有一个类 people需要加载,JVM首先会看根加载器能不能加载,不能的话再看拓展加载器能不能加载,再不能的话,在看系统加载器能不能加载,再不能的话就看用户自定义的加载器能不能加载,一旦上层的加载器能加载,就不判断下层的加载器能不能加载了,这就是所谓的父委托机制
相关文章推荐
- Leetcode 63:Unique Paths II
- js页面滚动时层智能浮动定位实现(jQuery/MooTools)
- Visual Basic 6 API压缩数据
- 【数位DP】BZOJ3629数字之积
- ASP.NET Response.Filter
- 【数位DP】BZOJ3629数字之积
- Jquery的foreach .each方法详解
- 饿了么 ---Java面试
- HDU 1176(二维动态规划)
- pat Public Bike Management (30)
- 2016-02-20-阅读笔记:CXX虚函数 + tensorfuse API统一的一种封装 + insignts: unsupervised learning + vision资料汇编
- 实时数据库简介和比较---PI
- 删除MySql服务
- EPUBBuilder编辑器新版
- QGis二次开发基础 -- 添加在线地图服务
- (二) 以PullToRefreshListView为例,讲解PullToRefresh中的View初始化操作
- POJ 3273 Monthly Expense 二分查找的应用
- 【CSS3】 CSS3实现“图片阴影”效果
- gulp常用任务
- Arrays常用API的事例