JVM类加载过程简述

  1. ①加载,根据类的全限定类名找到相应的字节码文件也就是编译生成的.class文件并读入内存中。
  2. 然后生成一个java.lang.Class的类,这个类就是要加载的类。
  3. ②验证,文件格式校验、字节码校验、元数据校验、符号校验等,以保证生成的类符合jvm规范。
  4. ③ 准备,这个阶段会给静态变量分配内存,赋默认初始值,给final的变量赋值。
  5. ④ 解析,将符号引用解析成直接引用,包括方法解析、接口解析等。
  6. ⑤ 初始化,给类的成员变量赋值。

触发jvm加载类的时机之一就是调用class.forname,
还有调用一个类的静态变量或者静态方法,还有new,还有jvm启动时指定的类,这些都会出发jvm去加载一个类。


类的加载机制遵循 :

  • ① 全盘委托,一个类的和他依赖和引用的类都由一个加载器加载
  • ②双亲委托,加载一个类时总是由父类先去加载,找不到再由子类加载。自底向上检查,自顶向下加载。
  • ③缓存机制,所有加载过的类都会被缓存起来,加载一个类时先到缓存里找,如果没有再去加载class文件。所以在修改class后需要重启jvm

类的加载器包括三种:

  • BootstrapClassLoader(启动类加载器) 负责加载核心java类;
    –可以使用Launcher.getBootstrapClassPath().getURLs()获取类加载器加载路径。
  • ExtensionClassLoader(扩展类加载器),负责加载lib/ext下的扩展类;
  • ApplicationClassLoade(应用程序类加载器)负责加载classpath下的类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值