zoukankan      html  css  js  c++  java
  • 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。

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

  • 相关阅读:
    clientHeight、offsetHeight和scrollHeight
    关于网页元素的定位问题及offsetParent的讨论
    SQL关闭自增长列标识:SET IDENTITY_INSERT
    动态添加对Web Service的引用
    关于asp.net导出Excel
    scrollTop、scrollLeft、scrollWidth、scrollHeight
    ADO.NET实体数据模型
    不能加断点 单步调试被跳过
    无法启动程序“http://localhost:3303/Default.aspx”
    asp.net本质论学习笔记第一章
  • 原文地址:https://www.cnblogs.com/zhouzhiyao/p/13188139.html
Copyright © 2011-2022 走看看