黑马程序员技术交流社区

标题: 堆和栈有什么区别? [打印本页]

作者: 三土    时间: 2015-7-21 22:35
标题: 堆和栈有什么区别?
一直对这个不是很理解,望解惑

作者: 刘贤俊    时间: 2015-7-21 22:39
栈中存放的是方法中或方法声明上的局部变量,而堆内存中存放的是同过new出来的变量
作者: 三土    时间: 2015-7-21 22:43
全局变量呢?
作者: palysh    时间: 2015-7-22 00:03
三土 发表于 2015-7-21 22:43
全局变量呢?

静态全局变量,不在栈中也不在堆中,而在另外一个区 暂且叫做 方法区
作者: 游呤人    时间: 2015-7-22 00:10
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
优缺点:堆得优点就是可以动态分配内存大小,生存期也不必告诉编译器,因为它是在运行中动态分配内存的;缺点就是由于是在运行时动态分配内存的,所以读取速度较慢。
栈的优点就是读取速度快,而且数据可以共享;缺点就是存在于栈中的数据大小及周期必须是确定的,缺乏灵活性。
作者: Xia_    时间: 2015-7-22 00:24
Person s = new Person();
s地址存放在栈内存里面,new出来的对象储存在堆内存里面
作者: 以梦为码    时间: 2015-7-22 01:06
楼上的楼上,总结的真全面
作者: e咕噜    时间: 2015-7-22 22:59
堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
栈(stack)又名堆栈,它是一种先进后出(FILO)的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素
作者: fever_ai_my    时间: 2015-7-22 23:00
学习学习
作者: Matrix_heima    时间: 2015-7-22 23:32
栈中存放的是局部变量,堆中存放的是实例变量
作者: 以梦为码    时间: 2015-7-23 00:38
堆:动态分配内存,生命周期不用告诉编译器,由回收站回收,存取速度慢
栈:由系统分配内存大小,生命周期和存储的数据大小必须是确定的,缺乏灵活性,存取速度快,栈的数据是共享的
不用管我我就是挑战下看看能不能写下来,刚看完这个题      

作者: 编程小黑    时间: 2015-7-23 00:43
我也不懂,学习了
作者: 王文辉    时间: 2015-7-23 09:48
这个你最好还是看下毕老师的视频,有详细的内存示意图
作者: 张红(新)    时间: 2015-7-23 13:12
游呤人 发表于 2015-7-22 00:10
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量 ...

受教了                                                      




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2