【为什么有些对象在没有引用后,内存仍无法被回收】http://t.cn/AXvRFdQc
当一个对象在我们的代码中,看似已经没有任何变量再指向它(即“没有引用”)之后,其所占用的内存,有时,仍然无法被垃圾回收机制所回收,这一现象的根源在于我们所认为的‘没有引用’”与“垃圾回收器所判定的‘没有引用’”之间,存在着一个致命的“认知偏差”。一个对象能否被回收的唯一标准,是它是否“可达”。导致一个逻辑上早已“无用”的对象,在物理上,却依然“可达”的常见“元凶”主要涵盖:存在“逻辑上过期”但“物理上可达”的隐性引用、被全局或静态集合所持有、闭包的无意捕获、未被注销的事件监听器或回调函数、以及循环引用(在某些旧的回收机制中)。
发布于 北京
