我正在阅读Stack Overflow关于延迟加载和NodeJS中模块的手动卸载的一些答案,one of the answers引用
节点是单线程的,因此加载模块的内存占用量不是每个连接,而是每个进程。加载模块是一次性的,可以将其存入内存。
这是一个公平的解释,但是有一个问题是,在某些时间点,旧的未使用的模块(之前需要并且不再用于执行)从缓存中清除了?在这种情况下,垃圾收集器如何工作?
更新:
This answer显示了如何从缓存中手动删除模块,这也表明模块缓存可能与常规的内存中对象不同
var name = require.resolve('moduleName');
delete require.cache[name];
答案 0 :(得分:1)
节点的documentation on modules表示它们已被缓存(在v5 docs中似乎没有任何不同),并且没有建议缓存释放其对模块的引用的任何机制。只要存在对模块的引用(例如,在缓存机制中),它就会像任何其他JavaScript对象一样保留在内存中。