黑马程序员技术交流社区

标题: 请问一下各位大神,堆和栈有什么区别? [打印本页]

作者: zhanqq2010    时间: 2014-6-15 20:04
标题: 请问一下各位大神,堆和栈有什么区别?
堆和栈,特别难理解,很烦啊
作者: 215041631    时间: 2014-6-15 20:31
本帖最后由 215041631 于 2014-6-15 20:47 编辑

刚开始学习别往太深了想,先把它理解,后面再深究。
数据类型有两种,你可以简单的理解为栈内存是存放基本类型数据和引用变量的,而对象会存放在堆内存里。
如 int a = 3 ;  变量a和3都存在栈内存中。
而 String s = "abc" ,这句话会在堆内存中会新建一个String对象 并存放这个abc。s 这个引用变量会存在栈内存中并且指向对内存中的对象的地址。

我也刚开始学,不知道说的有没有不对或者不懂的。后面一起讨论嘛。:handshake


作者: 532989476    时间: 2014-6-15 20:50
同求解答。。
作者: junly    时间: 2014-6-15 20:52
不知道楼主指的是数据结构的堆和栈还是操作系统中的堆和栈。
我这里还是浅浅地解释一下数据结构的吧~
记住的要点:①堆,列队优先,先进后出 。②栈,后进先出(Last-In/First-Out)。
要点①理解技巧:
理解成这个是一个盘子叠起来的,为了方便和安全,肯定是从最上面的开始拿,所以就导致了先叠上去的是后面拿出来的,不能中间抽取。
要点②理解技巧:可以理解成你在吃可比克薯片,按照常规,你应该是先吃后面的。
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
详见百度百科:http://baike.baidu.com/link?url=lxi-i9RpsN_GBZnSn-zfA8bS1K9KykeUjlEhq1kLpvvIfWf4aL0loXl9OPOD9rLs
求版主给技术分!早日进黑马!
作者: Alan_Kwan    时间: 2014-6-15 21:16
堆数据只有在程序运行结束才会销毁,栈你可以理解为客栈,把人理解为函数,生命周期就是登记-》退房这段时间,退房后就自动销毁。
作者: alive    时间: 2014-6-15 21:42
215041631 发表于 2014-6-15 20:31
刚开始学习别往太深了想,先把它理解,后面再深究。
数据类型有两种,你可以简单的理解为栈内存是存放基本 ...

"abc"字符串是放在方法中的常量池中,在String和StringBuffer会学到,这里的s没有指向堆,指向的是常量池
作者: zhanqq2010    时间: 2014-6-15 22:38
junly 发表于 2014-6-15 20:52
不知道楼主指的是数据结构的堆和栈还是操作系统中的堆和栈。
我这里还是浅浅地解释一下数据结构的吧~
记住 ...

非常感谢 ,  但是技术分真的给不了  兄弟  你看我的技术分才多少     痛苦啊
作者: zhanqq2010    时间: 2014-6-15 22:40
Alan_Kwan 发表于 2014-6-15 21:16
堆数据只有在程序运行结束才会销毁,栈你可以理解为客栈,把人理解为函数,生命周期就是登记-》退房这段时 ...

栈中存的是地址,堆中存的是内容?
作者: 华子    时间: 2014-6-15 23:03
堆存储的东东要靠垃圾回收机制处理才会消失,栈存储的东东是自动释放的,是一个零时变量。
作者: woshihq    时间: 2014-6-16 00:06
基本数据类型在栈中,对象在堆中

作者: wssjdysf    时间: 2014-6-16 00:13
堆放内存,栈放变量
作者: zhanqq2010    时间: 2014-6-16 00:47
wssjdysf 发表于 2014-6-16 00:13
堆放内存,栈放变量

堆不是在内存里吗 、?  怎么存放内存?
作者: zhanqq2010    时间: 2014-6-16 00:50
华子 发表于 2014-6-15 23:03
堆存储的东东要靠垃圾回收机制处理才会消失,栈存储的东东是自动释放的,是一个零时变量。 ...

哦  原来是这样啊
作者: zhanqq2010    时间: 2014-6-16 00:51
这个堆和栈确实很费静啊
作者: wssjdysf    时间: 2014-6-16 12:59
打错了,把对象打成内存了,堆里面放的是对象,栈放的是变量
作者: 小强9090    时间: 2014-6-16 13:14
多理解理解




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