当前位置: 首页 > news >正文

JVM虚拟机:从结构到指令让你对栈有足够的认识

本文重点

在前面的课程中,我们学习了运行时数据区的大概情况,从本文开始,我们将对一些组件进行详细的介绍,本文我们将学习栈。栈内存主管java的运行,是在线程创建时创建的,它是线程私有的,它的生命周期是跟随线程的生命期,也就是说线程结束栈内存就释放了,对于栈来说不存在垃圾回收的问题。

栈的结构

每个线程都会包含一个栈区,每个栈又包含了若干个栈帧,每次方法调用的时候就会从上加入一个栈帧,一个栈帧中存储一些内容。每个栈帧中都拥有:

局部变量表:主要存放了编译器可知的各种数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)。其中64位长度的long 和double类型的数据会占用2个局部变量空间, 其余的数据类型只占用1个。

操作数栈:每个栈帧都包含一个称为操作数栈的后进先出的栈。栈帧刚刚创建的时候,操作数栈是空的。Java虚拟机提供一些字节码指令来从局部变量表或者对象实例的字段中复制常量或者变量到操作数栈中,也提供了一些指令用于从操作数栈取走数据、操作数据以及把操作结果重新入栈。在调用方法时,操作数栈也被用来准备调用方法的参数以及接收方法返回结果。一个long或者double类型的数据会占用两个单位的栈深度,

http://www.lryc.cn/news/211411.html

相关文章:

  • 【启发式算法】白鲸优化算法【附python实现代码】
  • 【Python机器学习】零基础掌握RBFSampler内核近似特征
  • 高级工技能等级认定---网络设备安全
  • spting Boot常见知识点
  • 大模型在数据分析场景下的能力评测
  • [笔记] 关于y1变量取名冲突的问题
  • js笔记(函数参数、面向对象、装饰器、高级函数、捕获异常)
  • Istio实战(八)- Istio 动态准入 Webhook 配置
  • Vue的安装
  • macOS M1安装wxPython报错
  • 【数据结构】交换排序
  • 腾讯云2023年双11服务器优惠活动及价格表
  • PointNet++复现、论文和代码研读
  • 轨迹规划 | 图解路径跟踪PID算法(附ROS C++/Python/Matlab仿真)
  • 吴恩达《机器学习》1-3:监督学习
  • Flutter PopupMenuButton下拉菜单
  • 国家数据局正式揭牌,数据专业融合型人才迎来发展良机【文末送书五本】
  • H5游戏源码分享-像素小鸟游戏(类似深海潜艇)
  • Vue 3 响应式对象:ref 和 reactive 的使用和区别
  • H5游戏源码分享-密室逃脱小游戏(考验反应能力)
  • 【LeetCode刷题-哈希】--706.设计哈希映射
  • 前端 : 用HTML ,CSS ,JS 做一个点名器
  • css:button实现el-radio效果
  • 算法工程师-机器学习-数据科学家面试准备4-ML系统设计
  • git重装后如何连接以前项目
  • 【java学习—十】TreeSet集合(5)
  • JMeter的使用,傻瓜式学习【上】
  • 主定理(一般式)
  • WLAN的组网架构和工作原理
  • 使用OBS Browser+访问华为云OBS存储【Windows】