JVM虚拟机内存模型
2023-05-30 09:56:55 0 举报
内存模型
作者其他创作
大纲/内容
1.域名2.域类型3.域修饰符如<public、private、protected>等4.域的声明顺序
本地机器指令B
附加信息
加载不了
存放在方法区
jvm用来联系在堆上面的Class对象,也就是常用的instanceMirrorClass
BootStrapClassLoader
操作数栈
对象头区域header
用来存储执行指令(按照顺序)的地方,将指令存入或弹出进行执行
PC计数器
线程1栈帧
Mark Word
App.class
线程共享
用于记录调用方的下一行指令,这样在Method_A使用完成后才能知道,应该返回哪一个方法
对类加载器的引用
返回地址 回复现场
开始
堆
类加载子系统
To区
堆区存储结构
字节码文件
Tenured区
从上往下谁能加载谁加载此类
动态链接 直接地址
程序计数器
对Class类的引用
方法区
数组长度(可选)
本地机器指令A
JIT
执行引擎
虚拟机栈
不需要再次加载
指向运行时常量池中该栈帧所属方法的引用
对其填充
AppClassLoader
类型的常量池
老年代
本地方法栈
实例数据Instance Data
类加载子系统(双亲委托机制)
不可以加载
新生代
1.声明的顺序2.修饰符3.返回的类型4.名称5.参数列表6.异常表(方法显示抛出的异常)7.方法字节码(native、abstract方法除外)8.操作数栈和局部变量表大小
当前类是由哪个类加载器加载的
ExtClassLoader
Eden区
局部变量表
对其填充区
解释器
字节码索引1.告诉CPU当前该执行方法的第几行2.另外执行native方法时,执行C实现的代码,则此时的程序计数器是undefined
热点代码
ClassNotFound
方法区(Method Area)是可供各条线程共享的运行时内存区域。它存储了每一个类的结构信息,例如运行时常量池(Runtime Constant Pool)、字段和方法数据、构造函数和普通方法的字节码内容、还包括一些在类、实例、接口初始化时用到的特殊方法。JDK1.7之前存在于“永久代”中;JDK1.8之后使用元空间实现方法区,并且“字符串常量池”和“静态变量”放入了堆中。
逐行解释字节码
实例数据区
类信息
记录在方法中的局部变量,用于使用,其中包含了出参、入参其中第一个被记录的是this指针
oop模型
可以加载
域信息
java调用底层C/C++的时候(即使用@Native关键字时),此处会记录本地方法的栈
Method_A
1.字面量2.符号的引用(对类型、作用域、方法)
CustomClassLoader
main方法
From区
线程私有(独享)
方法信息
类变量
oop模型:https://blog.csdn.net/l577125882/article/details/108296729
方法表
类型指针
0 条评论
下一页