JVM 详细图
2023-02-03 17:32:02 0 举报
jvm相关的知识体系
作者其他创作
大纲/内容
是
操作数栈
线程隔离的数据区
连接
符号引用转化为直接引用能否成功
类是否加载过
初始化
运行方法区
基本数据类型对象引用returnAdsdress类型
执行引擎
虚拟机栈
本地库接口
new 指令
使用
栈帧
即将回收集合
加载
1.并不是所有虚拟机实现都含有类型指针,可以通过其他形式实现2. 如果对象是数组,则还需要在对象头中保存数组大小
本地方法库
类的生命周期
虚引用:不会产生引用,只是为了监控回收回调
否
解析
JVM的内存回收流程及说明
执行回收
又发现新的引用
软引用:快溢出时回收
语义分析,验证是否符合Java语言规范
对齐补充
可达性分析
动态链接
准备
HotSpot虚拟机默认的分配策略为longs/doubles、ints、shorts/chars、bytes/booleans、oops(Ordinary Object Pointers),从分配策略中可以看出,相同宽度的字段总是被分配到一起
不是必然存在的,也没有特别意义,主要是起到占位符的作用,因为内存管理系统要求对象起始地址必须是8字节的整数倍
JVM类加载机制
元数据验证
GC Roots
本地方法栈种JNI (即Native方法)引用的对象
弱引用:下次回收时回收
不回收
JVM内存分布总览
由所有线程共享的数据区
方法区
对象真正存储的有效信息,也是程序在代码中所定义的各种类型的字段内容
引用类型
内存分配
F-Queue队列
字节码验证:验证数据流和控制流分析
类加载流程
堆
对象的内存分布
存储对象自身的运行时数据,哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等
init执行
验证流程
字节码验证
Finalizer线程
对象头信息设置
强引用:不回收
针对F-Queue内对象进行二次标记
常量池中是否存在类的符号引用
验证
对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例
卸载
程序计数器
本地方法栈
文件格式验证
对象A
收否需要执行finalize()方法
符号引用验证
虚拟机栈(栈帧中的本地变量表)中引用的对象
方法区中类静态属性引用的对象
Mark Word
类型指针
32位是32BIt大小64位是64Bit大小
实例数据
GC 垃圾回收流程示意图
保证对象实例字段在Java代码中不赋值也可以使用
对象头(header)
局部变量表
方法出口
方法区中常量引用的对象
虚拟机视角的对象创建
对象是哪个类的实例、如何找到类的元数据信息、对象哈希码、GC分代信息等
GC 第一次标记
内存空间初始化
清理,完成回收
0 条评论
下一页