1、JVM虚拟机内存模型
2021-03-12 18:36:14 2 举报
JVM虚拟机
作者其他创作
大纲/内容
字节码索引1.告诉CPU当前该执行方法的第几行2.因为执行native是执行C实现的代码,所以这时的程序计数器是undefined
堆
类型指针Klass Word
当前类是由哪个类加载器加载的
用于记录调用方的下一行指令,这样在Method_A使用完成后才能知道,应该返回哪一个方法
在java中使用cglib调用底层C/C++的时候(即使用@Native关键字时),此处会记录本地方法的栈
本地方法栈
不可以加载
Tenured区
动态链接 直接地址
方法表
本地机器指令A
热点代码
AppClassLoader
某部分结构细化
实例数据区
方法区
Eden区
执行引擎
操作数栈
Java虚拟机结构
CustomClassLoader
记录在方法中的局部变量,用于使用,其中包含了出参、入参其中第一个被记录的是this指针
类型的常量池
附加信息
jvm用来联系在堆上面的Class对象,也就是常说的instanceMirrorKlass
类信息
不需要再次加载
ExtClassLoader
BootstrapClassLoader
堆区存储结构
JVM是软件模拟的虚拟机,基于栈运行,其中每一个线程分配一个栈帧,每一个栈帧包含一下内容
对Class类的引用
类加载子系统
线程共享数据
Method_A
没加载过
整体架构解释
逐行解释字节码
线程1栈帧
方法信息
域信息
存储结构大小1、新生代与老年代比例的值【1:2】2、新生代中,Eden区、From区、To区比例值【8:1:1】 每个区的作用Eden区:对象诞生的地方From区:第一次垃圾回收后存活的对象To区:当From区满了,和From区交换,然后自己进行垃圾回收Tenured区:15次都没回收掉的对象,进入老年代,也就是这里
main方法
返回地址 回复现场
实例数据Instance Data
ClassNotFound
对齐填充
数组长度(可选)
老年代
线程私有数据
本地机器指令B
Mark Word
1.域名2.域类型3.域修饰符如<public、private、protected>等4.域的声明顺序
对类加载器的引用
名词解释
存放在方法区
局部变量表
To区
JIT
App.class
字节码文件
实例对象instanceKlass
对齐填充区
开始
oop模型
自己加载此类
对象头区域header
指向运行时常量池中该栈帧所属方法的引用
解释器
流程加载
虚拟机栈
新生代
用来存储按照顺序执行执行指令的地方,将指令存入或弹出进行执行
加载过
1.声明的顺序2.修饰符3.返回值类型4.名字5.参数列表(有序保存)6.异常表(方法抛出的异常)7.方法字节码(native、abstract方法除外)8.操作数栈和局部变量表大小
可以加载
程序计数器
1.字面量(String、基本类型等)2.符号的引用(对类型、作用域、方法)
类变量
From区
PC计数器
0 条评论
下一页