JVM 类加载过程

虚拟机类加载机制

一. 加载的时机

(1)new getstatic putstatic invokestatic 对一个类进行 实例化对象 读取或者设置静态属性 调用静态方法
(2)反射
(3)加载一个类时 发现其父类没有初始化
(4)程序入口的类
(5) 动态语言支持

二. 类加载的过程
  1. 加载
    1. 通过类的全限定名获取二进制流
    2. 将流所代表的静态存储结构 转化为方法区的运行时数据结构
    3. 在方法区生成一个Class类型对象 用于访问这个类的各种数据
  2. 验证
    文件格式 元数据 字节码 符号引用
  3. 准备
    为类变量分配内存 并设置初始值的阶段
  4. 解析
    符号引用转化为直接引用的过程
    符号引用: 一组符号来描述所引用的目标 目标可以没加载在内存中
    直接引用: 直接指向目标的指针 相对偏移量 内存中已经存在
  5. 初始化
    执行cinit方法
    cinit 是由 静态变量赋值语句 和 静态代码块合并起来的
  6. 使用
  7. 卸载
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JVM类加载分为5个过程:加载,验证,准备,解析,初始化,使用,卸载,如下图所示: 加载 加载是指查找字节流并据此...
    树生1995阅读 346评论 0 0
  • 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确实编译语言发展的一大步。 虚拟机把描述类的数据从...
    胡二囧阅读 990评论 0 0
  • 虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、转换解析和初始化, 最终形成可以被虚拟机直接使...
    好好学习Sun阅读 1,268评论 0 3
  • JVM 定义 java虚拟机(java virtual Machine)是用于运行java应用程序的虚构个计算机....
    truemi阅读 1,223评论 0 2
  • 1.加载,将二进制字节流加载到方法区,然后在java堆中实例化一个java.lang.Class类的对象2.验证:...
    蒸汽飞船阅读 824评论 0 0