• Java 虚拟机栈


    栈结构

    栈,这种数据结构,太重要了。如果学习过算法,就可以了解它的强大了。

    栈,就像我们叠起来的盘子,只能对最上面的部分进行操作。对于栈,只有两种操作:

    • 入栈,在上面再加一个盘子
    • 出栈,拿掉最上面的盘子

    别小看这两种操作,他可以完成很多复杂的事情,这就是数据结构和算法的魅力。

    JVM 的运行是基于栈的指令集,也就是说,JVM 对于数据的操作,都是基于栈这种数据结构的。

    栈指令集

    我们写一段代码:

    package runningDate;
    
    public class JavaStackTest {
        public static void main(String[] args) {
            int a = 5;
            int b = 2;
            int c = a + b;
            int d = a * b;
        }
    }
    

    我们获得编译后的 .class 文件的表示

     0 iconst_5
     1 istore_1
     2 iconst_2
     3 istore_2
     4 iload_1
     5 iload_2
     6 iadd
     7 istore_3
     8 iload_1
     9 iload_2
    10 imul
    11 istore 4
    13 return
    

    我们来看其中的 iadd 介绍

    可以看到,其中说到,每个值是从栈中出栈得到的。

    栈、栈帧、方法

    在程序中,方法的调用是非常常见的。

    而方法的调用和栈这个结构来说,是非常的匹配。

    我们看到上图,我们以每一个方法作为一个栈帧。当我们调用方法1的时候,方法1的相关内容就作为栈帧1 压入栈中。如果方法1 中调用了 方法2,方法2 也压栈,以此类推。

    最后,我们看到,方法4 对应的 栈帧4 在最顶端。栈帧4 作为当前栈帧,线程也只能执行当前栈帧,也就是执行方法4。当方法4结束的时候,当前栈帧就变成了栈帧3。

    这种结构,是不是很符号,我们函数调用的运行规则。

  • 相关阅读:
    leetcode(4) Median of Two Sorted Arrays
    logisitic回归
    共识算法 pos,Dpos
    solidity合约详解
    solidity中的memory和 storage详解
    win10下搭建私链
    区块链学习(7) 共识
    区块链学习(6)区块链
    区块链学习(5)比特币网络
    区块链学习(4)交易(二)
  • 原文地址:https://www.cnblogs.com/zhouzhiyao/p/13188139.html
Copyright © 2020-2023  润新知