垃圾收集器是否会从NodeJS中的内存中破坏过时所需的模块?

时间:2016-03-05 17:42:27

标签: javascript node.js garbage-collection

我正在阅读Stack Overflow关于延迟加载和NodeJS中模块的手动卸载的一些答案,one of the answers引用

  

节点是单线程的,因此加载模块的内存占用量不是每个连接,而是每个进程。加载模块是一次性的,可以将其存入内存。

这是一个公平的解释,但是有一个问题是,在某些时间点,旧的未使用的模块(之前需要并且不再用于执行)从缓存中清除了?在这种情况下,垃圾收集器如何工作?

更新

This answer显示了如何从缓存中手动删除模块,这也表明模块缓存可能与常规的内存中对象不同

var name = require.resolve('moduleName');
delete require.cache[name];

1 个答案:

答案 0 :(得分:1)

节点的documentation on modules表示它们已被缓存(在v5 docs中似乎没有任何不同),并且没有建议缓存释放其对模块的引用的任何机制。只要存在对模块的引用(例如,在缓存机制中),它就会像任何其他JavaScript对象一样保留在内存中。