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
添加回答
舉報