Skip to content

内存管理

    memory
     /  \
stack     heap
fn/local  obj/global

栈空间

用完回收,连续存储,先进后出

堆空间

分为老生代、新生代

新生代:空间小,速度快,但空间利用率低。回收策略:Scanvage算法

老生代:新生代对象多次回收仍存活,空间大。回收策略:标记清除和标记整理

内存泄漏

如果一个值不再需要了,引用数却不为0,垃圾回收机制无法释放这块内存,从而导致内存泄漏。

  1. 缓存不断增长
    1. 缓存策略(LRU、无缓存运行)
    2. weakmap,避免干扰垃圾自动回收
  2. 事件重复绑定,比如在频繁触发的事件放置监听器
    1. 解绑
  3. 不断增长的数组: 生产大于消费

无法立即释放内存有两种情况,一是全局变量,一是闭包中间函数引用

node 有固定的内存使用上限,V8 1.4G

使用 Buffer 可以读取超过 V8 内存限制的大文件

Buffer 对象,属于堆外内存,意指不受 V8 分配

新生代中的对象存活时间较短,而老生代中的对象存活时间较长或者为常驻对象

如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap