JAVA虚拟机类加载机制

十年热恋 提交于 2020-01-21 03:22:05

JAVA虚拟机类加载机制

2020第一更 简单易懂JAVA虚拟机类加载机制

类从被加载到虚拟内存中开始,到卸载内存为止,他的整个生命周期包括:加载–>链接–>初始化–>使用–>卸载

加载

  1. 获取二进制字节流
    静态存储结构转化方法区的运行时数据结构
    在JAVA堆生成一个类对象、作为方法区的访问入口

链接:包含验证,准备,解析

  1. 验证
    验证Class的标识:魔术 Magic Number
    验证Class的版本号
    验证常量池
    Class文件每部分(字段表,方法表)是否正确
    元数据验证(父类验证,继承验证,final验证)
    字节码验证(指令验证)
    符号引用验证(通过符号引用是佛偶能找到字段,方法,类)
  2. 准备
    为类变量分配内存并且设置类变量的初始化阶段
    只对static类变量进行内存分配
    static int n = 2;
    初始化值是0,而不是2,因为这时候还没有执行任何Java方法.(静态变量,静态块初始化)
    static final int n = 2
    对应到常量池,在准备阶段必须被赋值成2
    类变量:一般称为静态变量
    实例变量:当对象被实例化的时候,实例变量就跟着确定了,随着对象的销毁而销毁。
  3. 解析
    对符号引用进行解析
    直接引用:指向目标的指针或者偏移量
    符号引用–》直接引用
    主要涉及:类,接口,字段,方法(接口,类)等。

初始化

  1. 为标记为常量的字段赋值,以及执行clinit方法
  2. clinit:(静态变量,静态块初始化)
  3. init类的实例构造器初始化
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!