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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘学明    高级黑马   /  2013-4-23 12:08  /  1874 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘学明    于 2013-5-2 10:01 编辑

JAVA中的堆内存和栈内存中有什么区别?
在老师讲对象的建立过程中了解了堆和栈
               成员变量随对象的建立存储在堆内存中
               局部变量存储在栈内存中 引用也存在栈内存中

但是具体的运行机制不是很了解    包括变量和对象等被垃圾回收等
很清楚的同学给讲一下 最好全面些 谢谢

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
程序内存的动态改变部分可以分成两个区:
栈(stack):内存总是向一个方向增加或向相反方向减少,这个内存区用于存放方法或块中声明的局部变量。遇到局部变量声明时内存增长,退出方法或块时这些变量弹出栈。
堆(heap):用于存储对象,对象的引用放在栈区,但是对象的数据区必须存放在堆中。堆是内存单元构成的一个巨大的表。New语句生成新对象时,保留的小块内存单元随时进行分配,一个内存单元块不再被现有变量引用时,这些不用的单元被释放和收集起来。

堆内存存放的有:String、基本数据类型、对象引用、static静态代码块等
栈内存存放的有:StringBuffer、对象等

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 丘凤光 于 2013-4-23 12:52 编辑

一些有关内存的帖子  
http://bbs.itheima.com/forum.php ... =%E5%86%85%E5%AD%98


http://bbs.itheima.com/forum.php ... =%E5%86%85%E5%AD%98

http://bbs.itheima.com/forum.php ... =%E5%86%85%E5%AD%98

http://bbs.itheima.com/forum.php ... =%E5%86%85%E5%AD%98


http://bbs.itheima.com/forum.php ... =%E5%86%85%E5%AD%98

建议楼主发贴前先搜索一下,也许很早前学长们就遇到了和你一样的问题并很好的解决了,当再看到你的问题时也许就懒得回答了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
续圆凯 发表于 2013-4-23 12:17
程序内存的动态改变部分可以分成两个区:
栈(stack):内存总是向一个方向增加或向相反方向减少,这个内存 ...

栈内放对象 ? !  栈不是放对象引用的?
回复 使用道具 举报
刘学明    发表于 2013-4-23 12:53
栈内放对象 ? !  栈不是放对象引用的?

额~~ 最后两句总结  栈和堆 写反了 。。  谢谢指出!:handshake
回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马