类装载器

Java类装载过程与类装载器

限于喜欢 提交于 2019-11-28 10:27:13
1. class装载验证流程 1.1 加载 装载类的第一个阶段 通过类的全限定名取得类的二进制流 转为方法区数据结构 在Java堆中生成对应的java.lang.Class对象 1.2 链接 -> 验证 目的:保证Class流的格式是正确的 文件格式的验证 是否以0xCAFEBABE开头 版本号是否合理 元数据验证 是否有父类 继承了final类? 非抽象类实现了所有的抽象方法 字节码验证 (很复杂) 运行检查 栈数据类型和操作码数据参数吻合 跳转指令指定到合理的位置 符号引用验证 常量池中描述类是否存在 访问的方法或字段是否存在且有足够的权限 1.3 链接 -> 准备 分配内存 ,并为类设置初始值 (方法区中,关于方法区请查看 Java内存区域 ) public static int v=1; 在准备阶段中,v会被设置为0 在初始化的<clinit>中才会被设置为1 对于static final类型(常量),在准备阶段就会被赋上正确的值 public static final int v=1; 1.4 链接 -> 解析 解析是唯一一个不确定顺序的过程,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java 语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的