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引擎的垃圾回收機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章