java类装载器

1 class的装载流程

加载--->链接----->初始化

(1)加载:

取得类的二进制流,转化为方法区的数据结构,生成java.lang.Class对象

(2)链接:

验证:保证class的格式是正确的。

文件格式验证

元数据验证

字节码验证

符号引用验证

准备:

分配内存,并为类设置初始值(方法区中)

除了final变量其他都是默认初始值

解析:

将符号引用替换为直接引用(将字符串代表的变量变化为直接引用)

(3)初始化

执行类构造器<clinit>

static变量赋值语句

static{}块

子类的clinit调用前要保证父类的先被调用

<client>是线程安全的

2classLoader

classLoader实例负责将java字节码读入到jvm中

classloader可以定制,满足不同的字节码获取方式

classloader负责类装载过程中的加载阶段

classloader中中重要的方法

1 public Class<?> loadClass(String name) throws ClassNotFoundException载入并返回一个类

2protected final Class<?> defineClass(byte[] b,int off,int len)定义一个类不公开调用

3protected Class<?> findClass(String name) throws ClassNotFoundEXception:回调方法自定义ClassLoader的推荐方法

4protected final Class<?> findLoadedClass(String name):寻找已经加载的类

classLoader分类

BootStrap ClassLoader(rt.jar)

Extension ClassLoader(lib/ext/*.jar)

Application ClassLoader(系统classloader,应用classloader)应用程序的classpath

Custorm ClassLoader(自定义ClassLoader)

自底向上查找类是否已加载

自顶向下去加载查找的类

双亲委派模式,bootsrapclassloader无法加载applicationclassloader加载的类

Thread.getContextClassLoader()

Thread.setContextClassLoader()

上下文类加载器是一个角色(所有的classloader都可以成为上下文加载器)

上层的类加载器,使用上下文类加载加载自己不能加载的类

热替换




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值