Java - Stack 与 Heap 的分别

阅读时间: 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。}}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章