栈(Stack)

“栈” 是一种数据结构

image.png
栈是一种数据结构,数据的存储方式为:FILO(先进后出)。

“栈” 用来存储程序执行的临时数据。

“栈” 的作用是为执行程序提供必须的内存空间,配合程序执行、函数调用、存放程序执行时的临时数据,配合线程执行用的。

如:方法函数定义

  1. int method(){
  2. int a = 1;
  3. int b = 2;
  4. int c = a + b;
  5. }

上述变量会依次压入栈中,相关结构:
image.png

  • 堆空间分配从大地址向小地址增长
  • 压栈 1 2 3;出栈 3 2 1

    如:函数调用

    int method(){
      int a = 1;
      int b = 2;
      int c = add(a,b);
    }
    int add(int a,int b){
      return a + b;
    }
    

    上述才做,依次压栈,相关结构如下:
    image.png

  • “?”用来存放 resturn 的值

  • 在返回后,“Stack Point”前的出栈数据,已被标记为清除

    “栈” 中存在的数据可能是对象

    经“逃逸分析”后的对象,除了方法中没有其他地方被使用到,对象可能被存储到“栈”中。

    每个线程都有自己的栈和程序指针

    堆(Heap)

    在 JVM 中,堆(Heap)不作为一种数据结构进行分析,堆(Heap)中存放一堆数据结构。
    堆的作用用来存储数据,应用通过堆存储数据(包括:空间申请、回收、托管)。