1. 程式人生 > >垃圾回收 及 內存泄漏

垃圾回收 及 內存泄漏

scrip 垃圾回收 存在 參考 高級程序設計 獲取 回收 收集 bsp

1、垃圾回收的策略通常有兩中——標記清除 和 引用計數 。 (詳細介紹請參考J《avaScript高級程序設計》)

2、js中最常用的垃圾收集方式是標記清除。但是COM對象(BOM和DOM對象就是使用C++以COM對象的形式實現的)垃圾收集機制采用的就是引用計數策略。

3、使用引用計數策略, 在函數中出現循環引用的時候,當函數執行完畢,可是函數裏的變量引用計數不為零,垃圾回收機制無法回收,這個對象將一直存在內存中。如果這個函數被多次調用的話,就會導致大量內存得不到回收。從而出現內存泄漏問題。

4、解決循環引用的問題,在不使用變量的時候,手工斷開原生JavaScript對象(獲取DOM對象的變量)與DOM元素之間的鏈接。用element = null;

總結(個人觀點):原生js對象不存在內存泄漏問題(原生js對象常用標記清除的垃圾回收策略),引起內存泄漏的問題主要還是在函數中對DOM的操作,同時DOM對象的屬性指向函數的對象。內存泄漏和閉包沒一點關系,只是閉包的結構操作函數有優勢,不註意就會在閉包中出現對DOM的循環引用。

具體 閉包函數的問題 有空看 JavaScript高級程序設計

垃圾回收 及 內存泄漏