阅读 142

JVM-类加载机制

二、类加载

(一)类加载包括 loading linking initialization 三个过程

image.png

  1. loading 阶段获取此类的二进制转化成方法区的运行数据结构,在内存中生成一个代表类的 class 对象

  2. linking 阶段会有三步 验证=> 准备 => 解析
    2.1 验证- 需要确保class文件符合JVM规范,前缀是cafebabe结构

    image.png2.2 准备- 未类变量赋默认的初始值,这里需要注意两点:

    A: 被final 修饰的static不包含在里面,因为被final修饰的在编译的时候就已经分配好了;
    B: 实例变量也不包含在里面,因为对象还没被创建;复制代码

    2.3 解析- 主要是将常量池的符号引用转换为直接引用的过程

    image.png

  3. initialization 阶段 就是执行类构造器方法的过程,clinit()方法是javac编译器自动收集到有被 static 修饰的代码块或类变量之后的构成的

image.png

(二)类加载机制-双亲委派

前面提到了类加载的过程,我们又知道Java提供了很多的常用类,比如String,那怎么能保证Java官方提供的类是安全的?这里java也提供了一套官方的保护机制-双亲委派机制; 官方的类交给自己的加载器加载,这样的话就可以防止核心API被篡改。

image.png


作者:卢卡夫斯基
链接:https://juejin.cn/post/7039168465445322789


文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐