如何排查並修復內存泄漏

要如何找到內存泄漏的地方?網絡

網絡上大部分文章只會紙上談兵,用一寫簡單的demo告訴你什麼樣的代碼會致使內存不會被js引擎回收。可是問題是:實際項目中致使內存泄漏地方,隱藏在浩如煙海的代碼山當中,拿着demo裏的代碼去翻看項目裏的文件,企圖找到問題代碼,幾乎是不可能的事情。工具

或者告訴你如何使用Chrome開發者工具去記錄和對比內存堆棧。因而看着內存變量列表裏幾十萬個變量,猶如大海撈針。測試

代碼多,文件多,找致使內存泄漏的問題代碼必需要有條理。內存

按以下步驟來就行啦!開發

  1. 首先肯定致使內存泄漏的模塊和什麼樣的操做會致使內存泄漏。
  2. 肯定出現了內存泄漏的文件範圍。並找到這一塊文件的總入口。爲了行文方便,假設這個文件是 memory-leak.js
  3. 整理memory-leak.js的依賴樹。把這個文件應用過的全部文件列成表記下來。
  4. 依次註釋掉表中的文件,並測試內存泄漏是否還在。
  5. 若是在,則該文件是無辜的。若是不在,則找到了出現了內存泄漏的文件。由此縮小了問題文件的範圍。
  6. 重複1~5的步驟,直到問題文件範圍儘量的小。
  7. 當問題文件範圍小到剩下一個文件時,則把1~5的步驟的遠離用在此文件的每一行代碼中。
  8. 依次註釋問題文件中的代碼,並測試內存泄漏是否還在。
  9. 直到找到出問題的那一行或一部分代碼。
  10. 找到問題以後去解決問題就行啦!

以上是解決內存泄漏問題的一個行之有效的辦法。變量