阅读时间: 10分钟
在使用Java开发程式的过程中,相信大家都可能见过stack和heap这两个字,例如在一些Error中、在JVM中做一些设定(heap memory space跟stack memory space)等等。
但有部分人都未必真正了解这些字眼有什么分别,想知道它们其实代表什么,可以留下来,等我为你们讲解一下。
它们都是JVM记忆体管理的一部分。
Stack
Stack是记忆体的其中一个部分
在程式中的local primitive variables、local object reference variables都会被储存在Stack。
每一个 Thread 都拥有属于自己的Stack。
Stack 是一种 后入先出 LIFO (last in, first out)的操作特色,优点是存取速度快和简单管理。正因为Stack的特性,所以一些完全可预测变数或函数都会存放在Stack以违到让系统可以全自动化管理的目的。
例子解释:
public void Method1(){ int i = 4; }
int i = 4,由于这个变数很明显地只能在执行Method1时才能用到,所以它的生命周期是可预测的。自然就可以存放在stack。
public void Method2(){ Method1();}
Method1 只有在执行Method2时才能用到,所以它包含的变数也可以存放在stack。
Heap
Heap是记忆体的其中一个部分。
在程式中的instances/objects、instance variables都会被储存在Heap直到不被使用为止/不受任何参考时。
在Java中的Garbage Collector机制会自动去删除在Heap中没有用的资料。
public static void main(String... ar){Method3 o1= new Method3(); //Method3 的物件会储存在heap但它的reference variable –o1 会储存在stack。}}