黑马程序员技术交流社区

标题: 不可不知的堆内存与栈内存 [打印本页]

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

如果堆内存中的数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制收回。因此,为了让垃圾回收机制收回一个数组所占的内存空间,可以将该数组变量赋为Null,也就切断了数组引用变量和实际数组之间的引用关系,实际数组也就成为了垃圾。
作者: 依米阳光    时间: 2014-11-21 10:24
建议楼主,既然介绍内存,就应该把内存的所有分类以及不同之处都给介绍一下,比如静态存储区域,全局变量存储区什么的都给说一下。希望采纳,谢谢!




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