java 类加载实例化常规流程图
2021-01-18 09:52:08 79 举报
jvm类加载使用过程
作者其他创作
大纲/内容
常规类加载过程
为类变量分配内存并设置类变量的初始值。初始值都是0,false等变量的零值。在meatspace中分配
锁状态标志
Mark work
将常量池内的符号引用替换为直接引用
连接
解析
对象头中可说的东西很多,锁的知识,并发相关都与其有关
一个栈(线程私有)
cwj 20200315
准备
实例数据
字节填充
heap
虚拟机栈
...
heap中一个实例
方法参数、内部局部变量
其他栈帧
哈希码
本地方法栈
java里天生可以动态扩展的语言特性就是依赖运行时期动态加载和动态连接特点实现
操作栈
程序计数器
GC分代年龄
jvm类加载(加载、验证、准备、解析、初始化)
Test.class
字节码生成等工具
指向运行时常量池中该栈帧所属方法的引用,用于完成调用过程的动态连接。1、常量池中的符号引用中一部分会在类加载阶段或第一次使用时候转化为直接引用(静态引用)2、运行期间转化为直接引用(动态引用)
Test.java
线程持有的锁
初始化
动态连接
1、文件格式验证 2、元数据验证3、字节码验证 4、符号引用验证
5条方法调用字节码指令:1、invokestatic2、invokespecial3、invokevirtual4、invokeinterface5、invokedynamic分派:静态多分派(重载),动态单分派(重写)
执行<clinit>()方法:该方法是有编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的。要区分类的构造方法,它不是类的构造方法。
stack frame
类型指针
mark work (存储自身运行时数据)
metaspace
加载
对象头
变量计算
偏向线程ID
局部变量表
栈帧是用于支持虚拟机进行方法调用和方法执行的属性结构
当前栈帧
1、通过类的全限定名来获取定义此类的二进制节流。2、将静态存储结构转换为元空间的运行时数据结构。3、在heap中生成java.lang.class对象
javac编译器完成编译成.class文件(字节码文件)
native memory
instance
验证
返回地址

收藏
0 条评论
下一页