内存管理
memory
/ \
stack heap
fn/local obj/global
栈空间
用完回收,连续存储,先进后出
堆空间
分为老生代、新生代
新生代:空间小,速度快,但空间利用率低。回收策略:Scanvage算法
老生代:新生代对象多次回收仍存活,空间大。回收策略:标记清除和标记整理
内存泄漏
如果一个值不再需要了,引用数却不为0,垃圾回收机制无法释放这块内存,从而导致内存泄漏。
- 缓存不断增长
- 缓存策略(LRU、无缓存运行)
- weakmap,避免干扰垃圾自动回收
- 事件重复绑定,比如在频繁触发的事件放置监听器
- 解绑
- 不断增长的数组: 生产大于消费
无法立即释放内存有两种情况,一是全局变量,一是闭包中间函数引用
node 有固定的内存使用上限,V8 1.4G
使用 Buffer 可以读取超过 V8 内存限制的大文件
Buffer 对象,属于堆外内存,意指不受 V8 分配
新生代中的对象存活时间较短,而老生代中的对象存活时间较长或者为常驻对象
如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap