【深入理解JVM】内存模型

关注点

  • 各个部分的作用
  • 各个部分的生命周期

各个部分的作用

  • 线程共享的区域:方法区和堆
  • 线程独享区:虚拟机栈、本地方法栈、程序计数器

方法区

方法区存放的数据大致分为四类:加载的类的信息、常量、静态变量、编译后的代码。

处于垃圾回收的考虑,方法区存放的是一些生命周期比较长的数据,这样有利于对内存的管理。

堆用来存放对象的实例

堆跟方法区的作用正好对立,堆存放的是一些生命周期比较短的数据。、

堆是线程共享的一块区域,里面的数据的生命周期长短不齐,因此是 GC 主要工作区,因为是线程共享,所以还存在同步互斥问题。

虚拟机栈

虚拟机栈是方法执行的内存模型,虚拟机会为每一个方法创建一个栈帧(Stack Frame),栈帧是一个方法的内存存储单元,存储这一个方法执行所需要的所有数据。

一个栈帧中的信息如下:

  • 局部变量表
  • 操作数栈:用于存储操作数,跟寄存器存储操作数的作用一致
  • 动态链接:每个栈帧中都有一个指向方法代码的地址(方法代码位于方法区内的编译后的代码中)
  • 方法出口:方法执行完时,要返回到调用者的调用该方法的位置,这样程序才能继续执行(如果方法执行时有出现异常,会有一个异常方法出口,上层的调用者不会得到该出口地址),该位置的地址就是方法入口,也就是方法执行完后的下一个执行点

栈帧内存模型

本地方法栈跟虚拟机栈很相似,只是用来运行本地的方法,而且虚拟机对这些方法的语言、使用方式和数据结构没有强制的规定,很灵活

程序计数器

指示指令的执行顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值