黑马程序员技术交流社区
标题:
怎么理解堆和栈?给个最通俗的回答,越通俗越好。。
[打印本页]
作者:
黑马巩伟伟
时间:
2011-12-9 23:44
标题:
怎么理解堆和栈?给个最通俗的回答,越通俗越好。。
本帖最后由 独行客 于 2011-12-15 20:51 编辑
希望能给个难人晚懂的。。。
作者:
李振元
时间:
2011-12-9 23:50
堆------进去了,就成了井底之蛙,被上面的压着,上不来;
栈------进去了,就像坐火车过山洞,一头出一头进。
作者:
杨银川
时间:
2011-12-10 00:12
栈的原理就是:有一个缸,往里边放土豆,先放进去的最后拿到,后放进去的最先拿到。
堆就是好比你想要一块地,不是用别人现成的,得自己去分配开发一份。
另外说明,栈就是存放函数调用过程中的临时变量!而堆是程序运行过程中动态申请的内存的存放处的!比如new的对象就在堆上,希望对你有帮助!
作者:
唐秀启
时间:
2011-12-10 06:27
堆:后进先出
栈:先进先出
作者:
箫庐
时间:
2011-12-10 09:01
堆是木桶;
栈是无底洞;
作者:
程传鹏
时间:
2011-12-10 13:47
可简单理解如下图
123.JPG
(750.05 KB, 下载次数: 89)
下载附件
2011-12-10 13:47 上传
作者:
王青山
时间:
2011-12-10 14:19
栈与堆都是Java用来在RAM中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就 走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自
由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。
作者:
许邦存
时间:
2011-12-10 23:33
栈存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。 堆,存放所有new出来的对象。
作者:
我心飞翔
时间:
2011-12-10 23:39
程序执行的过程
程序从硬盘载入的内存->有四个内存区供程序使用
heap(堆 ),stack(栈),data segment,code segment
heap堆:用来存放new出来的东西
stack栈:局部变量。
data segment:静态变量,字符串常量。
code segment:存放代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2