垃圾收集是JavaScript开发人员通常不必担心的那些深奥的主题之一。它只是在幕后发生,生活是美好的。通常,通过一些性能监控系统,我们可以看到内存占用率的上上下下:
通常,我们不必要主动请求Node.js进行垃圾回收。但有的时候,我们的确需要观察一下我们的程序的内存占用情况,比如:
如果您了解Java的话,会知道Java提供了System.gc()来让我们可以建议JVM来进行垃圾回收,虽然只是“建议”而已。Node.js里面是否有类似的用法呢?
答案是肯定的。不过,默认情况下,这个功能并未开启。
您可以使用以下的任何一种用法来建议GC来进行垃圾回收:
gc(); global.gc();
上面两种写法都是可以的,但是默认情况下,您会遇到“ReferenceError: gc is not defined”或“TypeError: global.gc is not a function”这样的错,怎么办?
Node.js支持一个命令行选项--expose-gc
,该选项将向该global对象添加gc()
函数,比如您可以这样执行您的代码:
node --expose-gc my_program.js
就可以了。
gc()
函数所做的,只是建议垃圾回收系统进行垃圾清理,但不能保证垃圾回收。垃圾回收是个比较费时的操作,因此GC更倾向于当内存不够用或者CPU占用不高的时候才去执行。