堆(heap)和栈(stack)的区别

共同点:都是内存的一部分。

不同点

  :堆是一个运行时数据区,一般是用NEW来分配的,空间是手动申请和释放的(Object a  = new Object() ),通过垃圾回收器来销毁。例如:程序员定义一个malloc(10),自定义开辟十个字节的空间。堆的空间需要程序员手动释放,不然可以一直访问,如若忘记释放就容易造成内存泄漏。

  :栈主要存放一些基本数据类型的变量(byte,short,int,long,float,double,boolean,char),等同于声明一个对象,空间由操作系统自动分配和释放(Object a  =null);后进先出。例如:定义一个 char a,系统会自动在栈上为其开辟空间;栈数据可以共享。栈的空间是自创自放的,所以一般运行结束周期也结束了,便不可再访问。

例子:

引用一位前辈的比喻:
  使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。
  使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

猜你喜欢

转载自www.cnblogs.com/Tibbers/p/12707633.html
今日推荐