类加载子系统
1 加载
类加载器:
bootStrap,exta,Application,
2 链接
验证
准备
解析
3 初始化
静态变量初始化
运行时
PC寄存器:
程序计数器,每个线程一份
栈:
虚拟机栈,每个线程一份.
栈帧:
LOCAL VARIABLES DYNAMIC LINK,RETURN ADDRESS
本地变量表 动态链接, 返回地址
NATIVE Method STACK
堆:
Java对象存放.多个线程共享
Method AREA:
类的一些信息:存放常量; 域的信息
执行引擎
将 字节码转为 机器指令. 通过 执行引擎 来和操作系统打交道
加载过程
加载:
将 一个 class 文件转为 二进制字节流.
将字节流 中的静态存储结构转为 方法区运行时的数据结构
在内存中生成一个 代表这个类的 Class对象. java.lang.Class 对象
这个对象作为 方法区各种数据的访问入口
链接:
验证,准备,解析
初始化:
链接
验证:
文件格式,元数据,字节码,符号引用
准备:
为类变量分配内存并设置该变量的默认初始值
这里不会为 final 类型的 static 变量分配内存
也不会为 实例变量分配初始化.实例变量会随着对象一起分配到堆中
解析:
常量池 内的符号引用转为直接引用的过程.
主要针对,类,接口,字段,类方法,接口方法,方法类型,
初始化–cinit
执行类 构造器 方法 ,<cinit>()的过程. 这个方法将
类变量和静态代码块中的语句合并而来
init
构造器函数
类加载器
自定义类加载器
大概的流程就是上面的过程