2016-04-23 47 views
0

buf.slice([開始[,結束])Node.js的緩衝垃圾收集

返回一個新的緩衝區引用相同的內存作爲原始,但偏移和由起點和終點指標裁剪。

請注意,修改新的緩衝區片將修改原始緩衝區中的內存,因爲兩個對象的分配內存重疊。

如果其中一個引用不存在,垃圾回收器如何處理分配的內存?

回答

2

在緩衝區上執行切片時,只會創建對原始緩衝區的新引用,該引用會在不同的點開始和結束。

如果更改原始緩衝區,切片引用也會更改。

這意味着整個內存塊將無法用於垃圾收集,直到所有引用(切片或不切片)都消失爲止。

希望這回答你的問題。

+0

謝謝,然後我假設切片緩衝區將保持原始分配的內存保留,但只提供切片部分。 –

+0

是的,正是如此 –

0

從Node.js緩衝區文檔:「Buffer#slice()的實現在現有Buffer上創建一個視圖而不復制,使得Buffer#slice()更加高效。」這意味着緩衝區引用相同的內存位置導致重疊。只有所有對緩衝區的引用都被刪除後,內存才能被垃圾回收器(gc)重新分配。當gc運行時,它將刪除沒有引用的緩衝區,並將內存返回到相應的池。

根據您初始化節點緩衝區的方式,節點緩衝區的行爲會有所不同。如果您使用了新的Buffer()方法,則現在不推薦使用它們,應該重新訪問該文檔。你應該使用緩衝區alloc(),bufferUnsafe()和bufferUnsafeSlow()方法。