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