..

4. 内存管理

闭包内存泄漏

闭包并不是那么容易造成内存泄漏。启动 nodejs 的时候加上参数 --expose-gc,这样就会有一个 gc() 函数可以调用,主动触发 GC,再配合 nodejs 的 process.memoryUsage 方法来查看内存占用,这样方便我们实验内存泄漏情况。

// pg-title: 闭包内存泄漏

function memoryUsage() {
  for (const [key,value] of Object.entries(process.memoryUsage())){
    console.log(`Memory usage by ${key}, ${value/1000000}MB `)
  }
}

const leak_memory = () => {
  const _100MbInByte = 100 * 1024 * 1024;
  const large_memory = new Int8Array(_100MbInByte).fill(0);
  return () => {
    console.log('hello, world');
    // console.log('hello, world' + large_memory[0]);
  }
}

let fns = [];

// 在 nodejs REPL 环境下,组合反复调用下列的方法
// 看看内存泄漏的情况
fns.push(leak_memory())
memoryUsage()
gc()

我个人很不同意 “闭包容易造成内存泄漏” 这样的说法。按那么说,class 以及普通的函数调用,也容易造成内存泄漏。