内存泄漏
- 指的是计算机中的内存逐渐减少
垃圾回收
todo...
需要知道的问题
- 页面是否占用了过多的内存?
- 是否使用了过多内存;
- 页面有没有内存泄漏?
- 是否有没有被垃圾回收清理掉的对象;
- 页面垃圾强制回收有多频繁?
- 内存使用分配太频繁;
内存分析
工具:
- 堆分析器 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: 对应对象所占用的最大内存;
总结
- 不要靠猜,使用工具测量它;