类加载机制
类加载机制
ssnoodles 发表于6个月前
类加载机制
  • 发表于 6个月前
  • 阅读 22
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

类加载

ClassLoader 干的事,就是把class文件加载到JVM中去。

Java默认提供3个类加载器

  • BootstrapClassLoader
  • ExtClassLoader
  • AppClassLoader
public class ClassLoaderTest {

    public static void main(String[] args) {
        System.out.println(ClassLoaderTest.class.getClassLoader());
        System.out.println(ClassLoaderTest.class.getClassLoader().getParent());
        System.out.println(ClassLoaderTest.class.getClassLoader().getParent().getParent());
    }
}

打印出:

sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@2f92e0f4
null

null 是因为BootstrapClassLoader 不是java写的而是c++写的。

先从顶层开始加载,如果加载不到就交由下一级加载,都加载不到就抛ClassNotFoundException异常。

具体过程

  • 加载
    • 根据类的全名获取二进制流
    • 将二进制流转化为JVM方法区的数据结构
    • 在内存中实例化Class对象,放入方法区对外提供接口
  • 验证
    • 二进制包含的信息符合JVM的要求
  • 准备
    • 静态变量分配到内存并初始化默认值
    • 常量池内的符号引用替换成直接引用
  • 初始化
    • 静态变量赋值
    • 执行静态代码块
标签: Java
共有 人打赏支持
粉丝 2
博文 28
码字总数 8902
×
ssnoodles
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: