深入理解jvm --第七章 虚拟机类加载机制

类生命周期

 

深入理解jvm --第七章 虚拟机类加载机制_第1张图片

  1. 类加载过程

深入理解jvm --第七章 虚拟机类加载机制_第2张图片

加载

深入理解jvm --第七章 虚拟机类加载机制_第3张图片

过程

深入理解jvm --第七章 虚拟机类加载机制_第4张图片

获取定义类的二进制字节流

深入理解jvm --第七章 虚拟机类加载机制_第5张图片

获取方式

深入理解jvm --第七章 虚拟机类加载机制_第6张图片

zip包

网络

运算时生成

其他文件生成

数据库

将字节流转化为方法区的运行时数据结构

在内存中生成一个代表该类的java.lang.Class对象

连接

深入理解jvm --第七章 虚拟机类加载机制_第7张图片

验证

深入理解jvm --第七章 虚拟机类加载机制_第8张图片

文件格式验证

元数据验证

字节码验证

符号引用验证

准备

深入理解jvm --第七章 虚拟机类加载机制_第9张图片

为类变量分配内存并赋初0值

解析

深入理解jvm --第七章 虚拟机类加载机制_第10张图片

将符号引用替换为直接引用

深入理解jvm --第七章 虚拟机类加载机制_第11张图片

类或接口解析

深入理解jvm --第七章 虚拟机类加载机制_第12张图片

不是数组类型传递全限定名用类加载器加载

时数组类型且元素为对象,按上一步加载元素类型

符号引用验证

字段解析

深入理解jvm --第七章 虚拟机类加载机制_第13张图片

class_index符号引用解析

所在类包含简单名称和字段描述符匹配的字段,返回该字段直接引用

若有接口,从下往上搜索接口,若接口中包含匹配字段则返回匹配的直接引用

若不是java.lang.Object,从下往上搜索父类,若有匹配字段则返回字节引用

查找失败

类方法解析

深入理解jvm --第七章 虚拟机类加载机制_第14张图片

class_index符号引用解析

深入理解jvm --第七章 虚拟机类加载机制_第15张图片

解析结果是接口抛异常

在类中查找是否有匹配方法,有则返回

在父类中查找是否有匹配方法,有则返回

在接口列表及它们父接口中查找是否有匹配方法,有则返回

失败

接口方法解析

深入理解jvm --第七章 虚拟机类加载机制_第16张图片

class_index符号引用解析

解析结果是类,抛异常

在本接口中查找是否有匹配方法,有则返回

在父接口中查找是否有匹配方法,有则返回

失败

初始化

深入理解jvm --第七章 虚拟机类加载机制_第17张图片

时机

深入理解jvm --第七章 虚拟机类加载机制_第18张图片

遇到new,getstatic,putstatic或invokestatic指令

使用java.lang.reflect包的方法对类反射调用

子类要先触发父类的初始化

用户指定要执行的主类

使用动态语言支持时的一些情况

过程

深入理解jvm --第七章 虚拟机类加载机制_第19张图片

执行类构造器的()方法

深入理解jvm --第七章 虚拟机类加载机制_第20张图片

()方法

深入理解jvm --第七章 虚拟机类加载机制_第21张图片

产生

深入理解jvm --第七章 虚拟机类加载机制_第22张图片

类变量的赋值动作

静态语句块

与构造函数区别

深入理解jvm --第七章 虚拟机类加载机制_第23张图片

不需要显式调用父类构造器,虚拟机保证父类的()方法在子类之前执行

第一个被执行()方法的是java.lang.Object类

类可能不被生成()方法

接口中也会生成()方法,但不需要先执行父接口的()方法

()方法会被自动同步执行

  1. 其他

深入理解jvm --第七章 虚拟机类加载机制_第24张图片

使用

卸载

你可能感兴趣的:(读书笔记)