栈(Stack)
“栈” 是一种数据结构
栈是一种数据结构,数据的存储方式为:FILO(先进后出)。
“栈” 用来存储程序执行的临时数据。
“栈” 的作用是为执行程序提供必须的内存空间,配合程序执行、函数调用、存放程序执行时的临时数据,配合线程执行用的。
如:方法函数定义
int method(){
int a = 1;
int b = 2;
int c = a + b;
}
上述变量会依次压入栈中,相关结构:
- 堆空间分配从大地址向小地址增长
-
如:函数调用
int method(){ int a = 1; int b = 2; int c = add(a,b); } int add(int a,int b){ return a + b; }
上述才做,依次压栈,相关结构如下:
“?”用来存放 resturn 的值
- 在返回后,“Stack Point”前的出栈数据,已被标记为清除
“栈” 中存在的数据可能是对象
经“逃逸分析”后的对象,除了方法中没有其他地方被使用到,对象可能被存储到“栈”中。每个线程都有自己的栈和程序指针
堆(Heap)
在 JVM 中,堆(Heap)不作为一种数据结构进行分析,堆(Heap)中存放一堆数据结构。
堆的作用用来存储数据,应用通过堆存储数据(包括:空间申请、回收、托管)。