A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 独行客 于 2011-12-15 20:51 编辑

希望能给个难人晚懂的。。。

8 个回复

倒序浏览
堆------进去了,就成了井底之蛙,被上面的压着,上不来;
栈------进去了,就像坐火车过山洞,一头出一头进。
回复 使用道具 举报
栈的原理就是:有一个缸,往里边放土豆,先放进去的最后拿到,后放进去的最先拿到。
堆就是好比你想要一块地,不是用别人现成的,得自己去分配开发一份。
另外说明,栈就是存放函数调用过程中的临时变量!而堆是程序运行过程中动态申请的内存的存放处的!比如new的对象就在堆上,希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
堆:后进先出
栈:先进先出
回复 使用道具 举报
箫庐 黑马帝 2011-12-10 09:01:13
报纸
堆是木桶;
栈是无底洞;
回复 使用道具 举报
可简单理解如下图

123.JPG (750.05 KB, 下载次数: 94)

123.JPG
回复 使用道具 举报
王青山 黑马帝 2011-12-10 14:19:36
7#
栈与堆都是Java用来在RAM中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。



堆和栈的区别可以用如下的比喻来看出:   

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就 走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自
由度小。   

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。  

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
许邦存 黑马帝 2011-12-10 23:33:04
8#
栈存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。 堆,存放所有new出来的对象。
回复 使用道具 举报
程序执行的过程
程序从硬盘载入的内存->有四个内存区供程序使用
heap(堆 ),stack(栈),data segment,code segment
heap堆:用来存放new出来的东西
stack栈:局部变量。
data segment:静态变量,字符串常量。
code segment:存放代码

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马