Javascript 垃圾收集器是否从NodeJS中的内存中敲打过时的必需模块?

Javascript 垃圾收集器是否从NodeJS中的内存中敲打过时的必需模块?,javascript,node.js,garbage-collection,Javascript,Node.js,Garbage Collection,我在StackOverflow上读到了一些关于在NodeJS中延迟加载和手动卸载模块的答案 节点是单线程的,因此加载模块的内存占用不是每个连接,而是每个进程。加载模块是将其放入内存的一次性操作 这是一个足够公平的解释,但还有一个问题,即旧的未使用模块(以前需要并且在执行中不再使用)是否会从缓存中清除?在这种情况下,垃圾收集器是如何工作的 更新: 演示如何从缓存中手动删除模块,这还表明模块缓存可能不同于常规内存中对象 var name = require.resolve('moduleName')

我在StackOverflow上读到了一些关于在NodeJS中延迟加载和手动卸载模块的答案

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

这是一个足够公平的解释,但还有一个问题,即旧的未使用模块(以前需要并且在执行中不再使用)是否会从缓存中清除?在这种情况下,垃圾收集器是如何工作的

更新

演示如何从缓存中手动删除模块,这还表明模块缓存可能不同于常规内存中对象

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

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

谢谢链接,但是模块缓存和内存对象之间没有任何区别吗?@AmmarHasan:从根本上说,加载的模块只是一个对象。谢谢,您的评论给了我一些有用的提示。“…这也表明模块缓存可能不同于常规内存中对象”不,一点也不:它只显示从对象(
缓存
)中删除属性。如果该属性引用了一个对象(模块),并且它是对该对象的唯一引用,那么该对象将有资格进行垃圾收集。一点也不特别,标准对象的东西。请注意,模块文档中没有关于
require.cache
,这意味着即使上述内容在(比如)v5.7.1中起作用,也无法保证它不会在v5.7.2中崩溃。未记录的内容可能会发生变化。