JVM-类加载机制

597 阅读1分钟

二、类加载

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

image.png

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

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

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

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

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

    image.png

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

image.png

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

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

image.png