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

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

本文重点

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

栈的结构

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

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

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


http://www.kler.cn/a/109095.html

相关文章:

  • STM32学习笔记------GPIO介绍
  • Spring框架之适配器模式 (Adapter Pattern)
  • 深入了解Git、GitHub、GitLab及其应用技巧
  • mysql 快速解决死锁方式
  • 【大数据学习 | HBASE高级】region split机制和策略
  • 晨控RFID技术助力半导体制造业革新之路
  • Kali安装docker
  • 婚礼的魅力
  • 清华训练营悟道篇之操作系统的内存管理
  • Redis的瓶颈在哪里?
  • 第一章 初识Android
  • 强大易于编辑的流程图组织图绘制工具draw.io Mac苹果中文版
  • Epinoia-有状态网络的意图验证模块,略读
  • JavaWeb复习
  • Leetcode—21.合并两个有序链表【简单】
  • Hadoop学习总结(搭建Hadoop集群(伪分布式模式))
  • c++系列——智能指针
  • vue3后台管理框架之将模拟Mock接口替换成真实接口
  • 图情档核心期刊 | 北大核心、CSSCI、CSCD
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • 【数据结构笔记】8.串
  • 《系统之美》读书笔记 - 系统及系统的三大特征
  • 电源控制系统架构(PCSA)之系统控制处理器
  • 考点之数据结构
  • nodejs+vue食力派网上订餐系统-计算机毕业设计
  • [GXYCTF2019]Ping Ping Ping 1