jvm内存一目了然的简单描述

jvm基本结构

jvm基本结构

jvm内存模型

jvm的内存区域,又成为jvm的运行时数据区,主要分为五大块:方法区、堆、虚拟机栈、本地方法栈、程序计数器
jvm内存模型

jvm内存 - 线程共享部分(方法区,堆)

方法区和堆,看图即明白

方法区作用:存放字节码文件转换成的的类信息
堆:唯一目的就是存放对象实例,几乎所有的对象、数组都在这里存放
方法区和堆

  1. jvm在加载Teacher和Student的时候,把Teacher和Student的所有类相关信息全部加载到了方法区,后续在Teacher chen = new Teacher()时,会在堆里面创建一个陈老师实例。
    简单概括:方法区存了类的全量信息,堆里面存的是类的实例或者也可以称之为实例的数据

  2. 陈老师的属性stu,是一个引用,他指向堆中的学生实例(图中没有画出stu实例,自行脑补)。
    引用不只是在栈里面,堆实例里面也可以存在引用

  3. 方法区也存在垃圾回收,回收效率很低

jvm内存 - 线程独占部分(虚拟机栈、本地方法栈、程序计数器)

虚拟机栈

为了方便记录方法调用,帮助实现方法先进后出的一个数据结构。
虚拟机栈
main方法调用show01(),show01()调用show02(),show02()调用show03(),在执行顺序上,是从main -> show01 -> show02 ->show03,在方法执行完成的顺序上,是show03->02->01->main,虚拟机栈的作用就是不断的按照执行顺序把方法压栈,然后再从03开始pop。
图中的每一个方法,都代表一个栈帧

栈帧

栈帧代表的是一个方法的调用
本地变量表:存放了当前调用方法中所有变量
动态链接:方法的调用 --> 执行的代码 --> 代码存在方法区 --> 动态链接指向方法区的代码
操作数栈:临时存放区域(本地变量表里的数据就是从操作数栈里拿的)
返回地址:指向地址,可以理解为 等号 int result = show01();

栈帧内部结构

本地方法栈

本地方法栈类似于虚拟机栈,只不过本地方法栈调用的是native方法(c、c++相关API)

程序计数器

在这里插入图片描述
如图,用于记录线程中的字节码执行到哪个一个状态(指令的编号)

画图不易,转载还请注明出处,谢谢
[5]: https://www.cnblogs.com/yuechuan/p/8984262.html/

[参考文章1][5]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值