首页 > 编程语言 > 详细

Java 虚拟机栈

时间:2020-06-24 16:35:51      阅读:64      评论:0      收藏:0      [点我收藏+]

栈结构

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

技术分享图片

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

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

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

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。

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

Java 虚拟机栈

原文:https://www.cnblogs.com/zhouzhiyao/p/13188139.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!