关于java:JVM二类加载机制

一、整加载过程:


1.1、Loading 装载

  1. 先找到classw文件 —> 字节流 —> 类加载器ClassLoader

测试:

public static void main(String[] args) {
    System.out.println(new Student().getClass().getClassLoader());
    System.out.println(new Student().getClass().getClassLoader().getParent());
    System.out.println(new Student().getClass().getClassLoader().getParent().getParent());
    System.out.println(new String().getClass().getClassLoader());
}

sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@10f87f48
null
null

重点:双亲委派准则

  1. 字节流 —> 静态数据构造 —> 办法区(供所有Java虚拟机栈应用)
  2. 字节流 —> class对象 —> 堆 (供所有Java虚拟机栈应用)

1.2、Linking 筹备

  1. Verification 验证
    验证数据的准确性。说白了就是看你文件对不对,例:文件格式、元数据、字节码、符号援用
  2. Preparation 筹备
    为类的动态变量分配内存,并赋值为以后类型默认值;
  3. Resolution 解析
    将类的符号援用(存在常量池)变成间接援用;

    这在class文件汇总只是示意改数据是什么类型,就如一种标识、一种符号,在这个过程中要将这些符号分配内存

1.3、Initiating 初始化

为类的动态变量真正的初始化值

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理