博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类装载器
阅读量:4185 次
发布时间:2019-05-26

本文共 1087 字,大约阅读时间需要 3 分钟。

文章目录

class装载验证流程

1、加载
  • 装载类的第一个阶段
  • 取得类的二进制流
  • 转为方法区数据结构
  • 在java堆中生成对应的java.lang.class对象
2、连接
  • 验证

    1)验证的目的:保证Class流的格式是正确的。

    • 文件格式的验证
      — 是否以0xCAFEBABE开头
      — 版本号是否合理
    • 元数据验证
      — 是否有父类
      — 继承了final类?
      — 非抽象类实现了所有的抽象方法。
    • 字节码验证
      — 运行检查
      — 栈数据类型和操作码数据参数吻合
      — 跳转指令指定到合理的位置
    • 符号引用验证
      — 常量池描述类是否存在
      — 访问的方法或字段是否存在且有足够的权限
  • 准备

    1)分配内存,并未设置初始值(方法区中)
    例如:public static int v=1;在准备阶段中,v会被设置为0.
    中才会设置为1。对于static final 类型,在准备阶段就会被赋上正确的值。publi static final int v = 1;

  • 解析

    1)符号引用替换为直接引用。
    在这里插入图片描述

3、初始化

1)执行类构造器,static 变量赋值,static{}语句。

2)子类的调用前保证父类的被调用。
3)是线程安全的。

什么类装载器ClassLoader

1、ClassLoader是一个抽象类,ClassLoader的实例将读入Java字节码将类装载到JVM中,ClassLoader可以定制,满足不同的字节码流获取方式,

ClassLoader负责类装载过程中的加载阶段
在这里插入图片描述
2、JDK中ClassLoader默认设计模式,分类

  • BootStrap ClassLoader(启动ClassLoader)
  • Extension ClassLoader(扩招ClassLoader)
  • App ClassLoader(应用ClassLoader /系统ClassLoader
  • Custome ClassLoader(自定义ClassLoader)
    每一个ClassLoader都有一个Parent作为父亲。
    3、JDK中ClassLoader默认设计模式 — 协同工作。

自底向上检查,自顶向下加载。

在这里插入图片描述
4、JDK中ClassLoader默认设计模式 --解决
Thread.setContextClassLoader()

  • 上下文加载器
  • 是一个角色
  • 用以解决顶层ClassLoader无法访问底层ClassLoader的类的问题。
  • 基本思想是,在顶层ClassLoader中,传入底层ClassLoader的实例。
    在这里插入图片描述

热替换

含义:当一个class被替换后,系统不需要重新启动,替换的类立即生效。

转载地址:http://anfoi.baihongyu.com/

你可能感兴趣的文章
Lucene的索引过程,非常简洁,
查看>>
4大数据库的比较
查看>>
Java 8的特性
查看>>
Spring整合JMS----基于ActiveMQ的实现
查看>>
sql语句常用
查看>>
数据的表前缀
查看>>
ActiveMQ入门
查看>>
hibernate的延时加载的get和load的区别
查看>>
springmvc避免IE执行AJAX时,返回JSON出现下载文件
查看>>
@Resource和@Autowire的区别
查看>>
java的非对称加密算法
查看>>
spring方法拦截器 MethodInterceptor
查看>>
Greenplum八点劣势是真的吗
查看>>
hbase与传统数据的区别
查看>>
Green Plum测试报告
查看>>
javax.crypto加密
查看>>
java判断socket是否断开
查看>>
java获得IP
查看>>
UDP丢包及无序的现象
查看>>
java的反射
查看>>