@hunter129

天天学习,好好向上!

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  21 随笔 :: 5 文章 :: 37 评论 :: 0 Trackbacks
本系列文章由作者@hunter129 翻译,转载请注明出处。

第二章 直接 VS 自动内存管理

内存管理是这样的一些过程,识别哪些对象不再有用,回收(释放)这些对象使用的内存,使这些内存在随后的分配中可用。在一些编程语言中,
内存分配是程序员的责任。这项复杂的任务导致了很多常见的错误,如怪异、错误的程序行为和程序崩溃。结果是,开发人员很大比例的时间都
在调试解决这些错误。

在直接内存管理的程序中经常犯的一个错误是悬挂引用(dangling references)。对象使用的空间被回收时,可能还有其他对象引用着。如果
一个对象拥有这样(悬挂)的引用,当它试图访问原始对象时,很可能这块空间已经分配给了新的对象,结果导致了未预期的访问。

另外一个在直接内存管理中常见的错误是内存泄露(space leaks)。内存分配完不再使用后却没有释放就会产生这样的错误。例如,你打算释放
一个链表(linked list)使用的空间时犯了一个错误,只回收了链表的第一个对象,其余的对象就不再被引用了,然而这些对象脱离了程序的控
制,再也无法使用或恢复。如果产生了足够的泄露,内存将持续消耗,直到再也没有可用的部分。

作为替代方案,一种称为垃圾收集(garbage collector)的自动内存管理方法正在被广泛使用,尤其是在现代的面向对象语言中。自动内存管理
使得编写出更多抽象的接口、更多稳定代码成为可能。

垃圾收集避免了悬挂引用问题,因为被某处引用的对象永远不会被收集,内存不会被释放。垃圾收集同样解决了上面提到的内存泄露问题,因为不
再被引用的内存将自动释放。
(译注:实际上java中依然有“内存泄露”问题,只是这种泄露与上文中提到的传统上的泄露不同。可以理解为对内存的不恰当使用,会导致垃圾收
集频繁发生[本应存储对象的没有存储下来],或OOM错误[本来应释放的内存没有释放]。)

上一篇:JAVA内存管理(一)综述和介绍
此文已转移到:http://www.xiegq.com/2013/09/14/25.html
posted on 2013-07-22 21:55 hunter129 阅读(268) 评论(0)  编辑  收藏 所属分类: java内存管理垃圾收集

只有注册用户登录后才能发表评论。


网站导航: