06.类装载器分解.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入JVM内核——原理、诊断与优化 第6周 法律声明 【声明】本视频和幻灯片为炼数成金网络课程的教学资料,所有资料只能在课程内使用,不得在课程以外范围散播,违者将可能被追究法律和经济责任。 课程详情访问炼数成金培训网站 类装载器 class装载验证流程 什么是类装载器ClassLoader JDK中ClassLoader默认设计模式 打破常规模式 热替换 class装载验证流程 加载 链接 验证 准备 解析 初始化 class装载验证流程 -加载 装载类的第一个阶段 取得类的二进制流 转为方法区数据结构 在Java堆中生成对应的java.lang.Class对象 class装载验证流程 -链接 验证 链接 - 验证 目的:保证Class流的格式是正确的 文件格式的验证 是否以0xCAFEBABE开头 版本号是否合理 元数据验证 是否有父类 继承了final类? 非抽象类实现了所有的抽象方法 字节码验证 (很复杂) 运行检查 栈数据类型和操作码数据参数吻合 跳转指令指定到合理的位置 符号引用验证 常量池中描述类是否存在 访问的方法或字段是否存在且有足够的权限 class装载验证流程 -链接 准备 链接 - 准备 分配内存,并为类设置初始值 (方法区中) public static int v=1; 在准备阶段中,v会被设置为0 在初始化的clinit中才会被设置为1 对于static final类型,在准备阶段就会被赋上正确的值 public static final int v=1; class装载验证流程 - 链接 解析 链接 - 解析 符号引用替换为直接引用 字符串 引用对象不一定被加载 指针或者地址偏移量 引用对象一定在内存 class装载验证流程 – 初始化 执行类构造器clinit static变量 赋值语句 static{}语句 子类的clinit调用前保证父类的clinit被调用 clinit是线程安全的 class装载验证流程 Java.lang.NoSuchFieldError错误可能在什么阶段抛出 什么是类装载器ClassLoader ClassLoader是一个抽象类 ClassLoader的实例将读入Java字节码将类装载到JVM中 ClassLoader可以定制,满足不同的字节码流获取方式 ClassLoader负责类装载过程中的加载阶段 JDK中ClassLoader默认设计模式 ClassLoader的重要方法 public Class? loadClass(String name) throws ClassNotFoundException 载入并返回一个Class protected final Class? defineClass(byte[] b, int off, int len) 定义一个类,不公开调用 protected Class? findClass(String name) throws ClassNotFoundException loadClass回调该方法,自定义ClassLoader的推荐做法 protected final Class? findLoadedClass(String name) 寻找已经加载的类 JDK中ClassLoader默认设计模式 – 分类 BootStrap ClassLoader (启动ClassLoader) Extension ClassLoader (扩展ClassLoader) App ClassLoader (应用ClassLoader/系统ClassLoader) Custom ClassLoader(自定义ClassLoader) 每个ClassLoader都有一个Parent作为父亲 JDK中ClassLoader默认设计模式 – 协同工作 rt.jar /-Xbootclasspath %JAVA_HOME%/lib/ext/*.jar Classpath下 完全自定义路径 JDK中ClassLoader默认设计模式 – 协同工作 JDK中ClassLoader默认设计模式 public class HelloLoader { public void print(){ System.out.println(I am in apploader); } } public class FindClassOrder { public static void main(String args[]){ HelloLoader loader=new HelloLoader(); loader.print(); } } public class HelloLoader { public void print(){ System.

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档