首先操作系统为每个线程都分配了一块独立的空间,这块空间被组织成了栈这种数据结构,这玩意是用来存储栈帧,每进入一个函数,就会将该函数的栈帧入栈,但这个函数执行完,返回结果之后,这个函数对应的那个栈帧就出栈了,下面通过简单的代码的执行过程来说明一下吧:
public static void main(String[] args) { int a = 10; int b = 20; int c =sum(a, b); System.out.println(c); } static int sum(int a, int b) { return a + b; }
加上下面这张图你会更好立即:
当sum方法执行完后sum方法出栈,返回值,main继续执行,当main执行完成后main也出栈。所以他们的出栈顺序是 sum --> main
栈帧(Stack Frame):是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从调用开始到执行完成,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。