Hello, Boswell!

内存泄漏

  • 指的是计算机中的内存逐渐减少

垃圾回收

todo...

需要知道的问题

  1. 页面是否占用了过多的内存?
  • 是否使用了过多内存;
  1. 页面有没有内存泄漏?
  • 是否有没有被垃圾回收清理掉的对象;
  1. 页面垃圾强制回收有多频繁?
  • 内存使用分配太频繁;

内存分析

  • 工具:

    • 堆分析器 Heap profiler
  • 对象大小:(Object sizes) 数据使用字节表示的

    • 直接占用内存(Shallow Size): 不包含引用的对像所占用的内存

      • 渲染器内存:页面在渲染的过程中所用到的所有内存
        • 页面本身的内存;
        • 页面中的js堆用到的内存;
        • 页面触发的相关工作进程中js堆用到的内存;
    • 占用总内存(Retained Size):包括引用的对象所占用的内存

      • 一个对象被删除后( let a={};a=null;删除对象 ),它引用的依赖对象就不能被GC根引用到,内存就被释放;
      • 一个对象占用的内存,包括依赖对象占用的内存;
  • 对象的占用总内存树:

  • 支配对象(Dominators)

  • v8

    • 数字的存储方式:

      • 31位整数直接值,小整数(small integers) ;
      • 堆对象,存储双精度,当一个值需要被打包;
    • 字符类型:

      • vm堆;
      • 外部渲染器内存;
    • 本地对象:

      • 不再js堆中的对象;
  • 堆分析器

    • Constructor: 所有通过该构造函数生成的对象;
    • Distance: 显示的是对对象到达GC根的最短距离;
    • Shallow Size:由构造函数生成的对象的直接占用内存;
    • Retained Size: 对应对象所占用的最大内存;

总结

  • 不要靠猜,使用工具测量它;
Last Updated:
Contributors: jmz, Boswell, mingzhuang.ji