..
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
以及普通的函数调用,也容易造成内存泄漏。