JVM06_栈帧之操作数栈

2024-04-09 12:38
文章标签 操作数 栈帧 jvm06

本文主要是介绍JVM06_栈帧之操作数栈,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

操作数栈

在这里插入图片描述
在这里插入图片描述
操作数栈和局部变量表都是用的数组结构,数组一旦创建,那么长度就固定了。
但是操作数栈不会采用访问索引方式进行数据访问
在这里插入图片描述

代码追踪

在这里插入图片描述
bipush:byte、short、char、boolean都是以int型来保存,bi代表int型
在这里插入图片描述
局部变量表和操作数栈都是基于数组的栈实现的
第一步:
bipush是把byte类型转换成int进行保存
PC寄存器中就是保存的指令地址,
bipush把15压入操作数栈,int占两个字节,所以下一个指令从2开始
istore_1:表示把int类型的值从操作数栈取出,存储到局部变量表中索引为1的位置(0位置是this)
在这里插入图片描述
第二:
8压入操作数栈,接着istore_2从操作数栈取出8放入局部变量表索引2的位置
在这里插入图片描述
第三:
iload_1,iload_2表示将局部变量表中1位置和2位置两个值取出,压入操作数栈,
iadd是一个字节码指令,经过执行引擎转换为机器指令,由CPU进行运算,对15和8相加。
在这里插入图片描述
第四:
将相加结果23压入到操作数栈。
然后istore_3,将操作数栈中的23放入局部变量表的3位置。
最后return
在这里插入图片描述
所以最终操作数栈长度2,局部变量表4
在这里插入图片描述
如果上一个栈帧有返回值,那么会先获取上一个栈帧的返回结果,并保存到操作数栈中
在这里插入图片描述

面试题

i++和++i的区别?
第一类问题,i++和++i一样,都是先把10放到操作数栈,然后取出存到局部变量表,最后加
在这里插入图片描述
操作数栈是数组实现的,那么长度在编译时就已经确定,既然是栈,那么只有入栈出栈,不能通过索引调用

通俗理解操作数栈:就是用来操作数的,实现结构是栈,原理是数组

栈顶缓存技术

在这里插入图片描述
hotspot JVM 采用的是基于栈式的虚拟机,那么就是指令多,需要很多的入栈出栈,读写次数就很多
栈顶缓存技术是把栈顶元素全部缓存到物理CPU寄存器中,因为寄存器中指令有指令少,速度快的优点,并且指令放到寄存器中,
可以直接在CPU计算,减少了读写次数,这样就加快了执行引擎的执行效率

这篇关于JVM06_栈帧之操作数栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888176

相关文章

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域详解(重点) 动态链接 动态链接:指向运行时常量池中该栈帧所属方法的引用。 多态 多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。 多态

将 x 减到 0 的最小操作数

题目简介:        给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。如果可以将 x 恰好 减到 0 ,返回 最小操作数 ;否则,返回 -1 。 算法思路:         通过上面的三个示例,我们可以看出如果直接从正面入手解题,那么我们该如何确定

将x减到零的最小操作数问题

欢迎跳转我的主页:羑悻的小杀马特-CSDN博客 目录 一·题目简述: 二·题目思路: 三·解答代码: 一·题目简述: leetcode题目链接:. - 力扣(LeetCode)  二·题目思路: 首先这道题,可能如果直接正面从最左最右开始找数值之和为x,这样看起来比较散,而我们不难发现中间肯定会有一段连续的区域,因此leetcode这道题肯定想让我们

【滑动窗口】将 x 减到 0 的最小操作数

将 x 减到 0 的最小操作数 将 x 减到 0 的最小操作数题目思路讲解代码书写 将 x 减到 0 的最小操作数 题目 题目链接: 将 x 减到 0 的最小操作数 思路讲解 按照题目的思路去做这一题是非常恶心的, 因此我们采用正难则反思路. 将问题转换为: 求中间某一个最长的数组长度, 使其和为sum - x, 其中 sum 是数组中所有数的总和 那么此时这个题目就被

【C++二分查找 前缀和】1658. 将 x 减到 0 的最小操作数

本文涉及的基础知识点 C++二分查找 C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1658. 将 x 减到 0 的最小操作数 给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 ,

Leetcode每日刷题之1658.将x减到0的最小操作数(C++)

1.题目解析 本题的要求是给出一个正整数数组与一个x,要求只从数组两端取数据后x减去取出的数据,求出将x减为0的最小操作数,即找出数组两端的数字保证其和为x并且要求取出的数字个数最少,如果没有符合要求的数字则返回-1 题目来源:1658.将x减到0的最小操作数   2.算法原理 本题如果直接从数组两端开始找若干数字使其等于x将很困难,那么可以转变思路,求出所给数组的总和后找出最长的子数

【C++庖丁解牛】函数栈帧的创建与销毁

🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. 寄存器2. ebp和esp是如何对堆栈进行维护的,mian函数栈帧如何创建2.1 push ebp2.1 move ebp esp2.2 sub

链接与装载---函数调用过程栈帧变化分析

目录 概述 函数调用过程中栈帧变化分析 准备知识 汇编代码语法风格 x86寄存器介绍 函数调用约定 函数栈帧分析 总结 参考 附录 cdecl 概述 学过c语言的同学都知道,函数调用过程是通过栈结构来实现的, 在内存空间中, 栈可用于保存函数的参数,局部变量, 返回值,返回地址等。 为什么要用栈来表示呢? 简单来说,栈是一种LIFO形式的数据结构,所有的数

【PL理论】(26) 内存管理:C语言实现内存管理的方式 | 栈帧的分配和释放 | C/C++ 手动内存管理

💭 写在前面:在前面的章节中,语言的语义只分配了新的内存位置,我们没有讨论内存位置的释放。在实际的语言中,内存位置在执行过程中会被不断地分配和释放。下面的章节,我们将讨论编程语言的这种内存管理,并且我们将重点介绍垃圾回收机制 (一种自动管理动态分配内存的机制) 。在接下来的讲解中,我们不会像之前那样使用编程语言的正式语义定义了。例如,尽管可以形式化地表示简单的垃圾回收方法,但这样会使内容变得

关于操作数关系

理解的重点就是如果给一个变量赋值如果没直接改变这个变量,就不能改变这个值。间接的没作用。 /// //关于操作数的问题 #include <iostream> using namespace std; int main() { int i = 4; int s = 4; int k = s; //cout << "j = " << j << endl; cout << "s = " << s <