JAVA/JVM中栈的官方定义:
每个JVM线程拥有一个私有的 Java虚拟机栈,创建线程的同时栈也被创建。
一个JVM栈由许多帧组成,称之为"栈帧"。
JVM中的栈和C等常见语言中的栈比较类似,都用于保存局部变量和部分计算结果,同时也参与方法调用和返回。
调用方法时,会在栈中压入一个栈帧,用来存储这个方法的参数和局部变量。
方法返回时,栈帧就会弹出,这个方法的局部变量和参数就会清除。
简单的代码:
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = add(a, b);
System.out.println(c);
}
public static int add(int a, int b) {
int c = a + b;
return c;
}
在这个代码块中main方法首先压栈,然后main方法的调用会在栈帧区中压入一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。
执行到方法add时,方法add压栈,add方法的调用会在栈帧区中压入栈帧,即当前栈帧为add方法的栈帧。
add方法return之后,栈帧和方法弹栈将return的值赋值给main方法中的变量c。
完毕之后应该有println方法压栈再弹栈。
最后main方法弹栈。