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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张凯zk47 中级黑马   /  2014-11-21 09:52  /  1007 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么有堆内存和栈内存之分?
当执行一个方法的时候,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存里,随着方法的执行结束,这个方法的内存栈也将自然销毁。
因此,所有在方法中定义的局部变量都是放在栈内存中的,当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随着方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量引用(在方法的参数传递时很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候收回他。

如果堆内存中的数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制收回。因此,为了让垃圾回收机制收回一个数组所占的内存空间,可以将该数组变量赋为Null,也就切断了数组引用变量和实际数组之间的引用关系,实际数组也就成为了垃圾。

1 个回复

倒序浏览
建议楼主,既然介绍内存,就应该把内存的所有分类以及不同之处都给介绍一下,比如静态存储区域,全局变量存储区什么的都给说一下。希望采纳,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马