js記憶體洩漏

Jonsen_li發表於2019-02-16

什麼是記憶體洩漏?

程式執行需要記憶體。只要程式提出要求,作業系統或者執行時就必須供給記憶體。

對於持續執行的服務程式,必須及時釋放不再用到的記憶體。否則,記憶體佔用越來越高,輕則影響系統效能,重則導致程式崩潰。

垃圾回收機制

所謂的垃圾回收機制,就是通過變數的引用次數來決定是否回收。

如果一個值的引用次數為0,就表示不再用到,這個值就會被垃圾回收機制找到回收並釋放

例: var arr = [1,2,3,4]; 
    arr = null; //當變數賦值為null時,引用次數為0

記憶體洩漏識別方法

怎樣可以觀察到記憶體洩漏呢?

如果連續五次垃圾回收之後,記憶體佔用一次比一次大,就有記憶體洩漏。這就要求實時檢視記憶體佔用

Chrome遊覽器

操作步驟:

1. 開啟開發者工具,選擇Performance皮膚

2. 點選勾選Memory,點選錄製按鈕(或Ctrl+E)

3. 在頁面上模擬使用者操作

4. 操作完成後點選Stop(Ctrl+E)完成錄製


如果記憶體佔用基本平穩,接近水平,說明不存在記憶體洩漏。
反之,記憶體波動差距較大就是記憶體洩漏

使用Node命令

使用Node提供process.memoryUsage()方法返回一個物件,包含Node程式的記憶體佔用資訊,該物件包含四個欄位。

1.res(resident set size):所有記憶體佔用,包括指令區和堆疊

2.heapTotal: “堆”佔用的記憶體,包括用到的和沒用到的

3.heapUsed: 用到的堆的部分,判斷記憶體洩漏以該欄位為準

4.external: V8 引擎內部的C++物件佔用的記憶體

相關文章