chrome瀏覽器
chrome memory
1. 各功能項說明
- summary視圖: 看到當前快照的所有信息
- comparison視圖: 多個快照之間的對比
- containment視圖: 查看整個 GC 路徑
- statistics視圖: 當前快照的各類數據類型(字符串/數組等)的佔比
2. chrome控制檯 profile/memory下欄目分佈
- constructor: 構造函數
- distance: 對象到根的引用層級距離
- shallow Size: 對象所佔內存(不包含內部引用的其它對象所佔的內存)(單位:字節)
- Retained Size: 對象所佔總內存(包含內部引用的其它對象所佔的內存)(單位:字節)
- new: 新建了多少個對象
- deleted: 回收了多少個對象
- delta: 對象變化值,即新建的對象個數減去回收了的對象個數
- Size Delta: 變化的內存大小(字節)
- alloc.Size: 已分配內存大小
- freed Size: 空閒內存大小;
3. v8的垃圾回收機制
- V8採用了一種分代回收的策略,將內存分爲兩個生代:新生代和老生代。新生代的對象爲存活時間較短的對象,老生代中的對象爲存活時間較長或常駐內存的對象。分別對新生代和老生代使用不一樣的垃圾回收算法來提高垃圾回收的效率。對象起初都會被分配到新生代,當新生代中的對象知足某些條件(後面會有介紹)時,會被移動到老生代(晉升)
- 新生代垃圾回收: 它將內存一分爲二,每一部分空間稱爲semispace。在這兩個semispace中,一個處於使用狀態,另外一個處於閒置狀態。處於使用狀態的semispace空間稱爲From空間,處於閒置狀態的空間稱爲To空間,當咱們分配對象時,先是在From空間中進行分配。當開始進行垃圾回收算法時, 從根對象(window/global)上開始掃描,將被引用的對象放到To空間,全部被引用對象都放到To空間後,非活躍對象佔用的空間將會被釋放。完成複製後,From空間和To空間的角色發生對換。
- 老生代垃圾回收: 標記清除和標記整理相結合,以標記清除爲主.標記清除分爲標記和清除兩個階段。在標記階段須要遍歷堆中的全部對象,並標記那些活着的對象,而後進入清除階段。在清除階段中,只清除沒有被標記的對象。
參考
V8引擎的垃圾回收機制算法
歡迎關注本站公眾號,獲取更多信息