2 回答
TA贡献1836条经验 获得超5个赞
如果您使用的是 UN*Xy 操作系统,则删除的文件将继续存在,直到所有打开的文件描述符都关闭。它存在,但没有名字。
“如果指向的文件被移动或删除,Linux 上打开的文件句柄会发生什么”给出了 Linux 的详细信息。
TA贡献1825条经验 获得超6个赞
我认为一般的答案是 JS 只是将写入数据块保留在堆中,并在其垃圾收集机制下在适当的时候释放它们。
写入数据块可能是一种类型<string> | <Buffer> | <Uint8Array> ...
,也许你想看看 API Buffer.allocUnsafeSlow(size),它提到:
当使用 Buffer.allocUnsafe() 分配新的 Buffer 实例时,4KB 以下的分配是从单个预分配的 Buffer 中切片的。这允许应用程序避免创建许多单独分配的 Buffer 实例的垃圾收集开销。
根据这一段,您可以通过另一个方法Buffer.alloc()在 Node 引擎的垃圾收集下推断为Buffer(这是我上面提到的类型之一)分配内存。
JS Object 的内存处理在堆中。createStream
必须先打开dest文件的数据并将其加载到堆/内存中,即使是这样的方法,writeStream.write()
也不是直接对文件/磁盘做I/O,它必须在内存中逐块处理数据首先,然后用最少的次数将其写入磁盘,所以当dest文件没有了时,可能这种方法的做法只是将这些数据块保留在堆中,然后看看什么时候释放它们的好时机。
与dest文件仍然存在的情况相比,我认为没有太大区别,它最终会为那些数据清理内存。
如果您想了解更多关于 Node 引擎中的垃圾收集:a-tour-of-v8-garbage-collection
添加回答
举报