垃圾回收过程中会导致应用程序暂停执行,由于新生代本身空间较小,且要复制的存活对象占比也少,因此即便执行全量垃圾回收也影响不大,但是老生代空间很大,存活对象也多,执行一次全量垃圾回收对于应用程序暂停会是一个比较长的时间,因此V8将老生的标记改成了增量更新的方式,使得标记和应用程序交替执行直到标记完成,然后垃圾回收再执行后面的清理工作。注意清理工作并不是增量的。
开发者可以指定强制垃圾回收吗?
答案是可以了,在启动node服务的时候使用--expose-gc flag
$ node --expose-gc file.js
这样全局对象上就有了执行垃圾回收的函数
global.gc();
推荐更安全的写法
function forceGC() if (global.gc) { global.gc(); } else { console.warn('No GC hook! Start your program as `node --expose-gc file.js`.'); } }
最后给大家分享一下参考资料:
https://www.jb51.net/article/140005.htm
您可能感兴趣的文章: