2017-05-11 123 views
1

我完全理解垃圾收集器最終會完成它的工作,並以與任何變量或對象(假設沒有循環引用等)完全相同的方式釋放分配給TypedArray的內存。在JavaScript中釋放TypedArray內存的最佳方式是什麼?

但是,我在很多WebWorkers中進行了很多連續處理,因此我希望GC儘快釋放此內存。使用正常的JavaScript陣列,只需設置array.length = 0;就可以做到這一點,但使用TypedArray時呢?

以下會導致內存儘快被釋放嗎?

var testArray = new Uint8Array(buffer); 

///Do stuff with testArray 

tesArray.length = 0; 

或者因爲TypedArray簡直是在ArrayBuffer一個觀點,我需要清除實際緩衝區本身也?如果是這樣,怎麼樣?

+0

爲什麼不使用testArray = null?我看到這種方法被大量使用。 – FailedUnitTest

+0

如果清零數組確實是最好的方法,並且實際上是有效的,那麼很好,我會使用它。但我擔心的是,實際的底層緩衝區本身後來被GC留下並清理乾淨。 – gordyr

+0

好點,我認爲GCs現在足夠聰明來照顧這個。 – FailedUnitTest

回答

3

否定對類型數組的引用應該足夠好。設置.length = 0不起作用,因爲 - 與通常的陣列相反 - length property是隻讀的。

如果你真的遇到垃圾收集器的問題,我建議嘗試重複使用反覆使用同一個緩衝區,而不是一直分配新的,並希望它們被釋放。

相關問題