2017-05-11 1 views
1

私は、ガベージコレクタが最終的にその仕事をし、TypedArrayに割り当てられたメモリを、変数やオブジェクトとまったく同じ方法で解放することを完全に理解しています(循環参照がないと仮定します)。JavaScriptのTypedArrayからメモリを解放する最も良い方法は何ですか?

しかし、私はWebWorkersの数で多くの連続処理を実行していますので、このメモリをできるだけ早くGCで解放したいと考えています。通常の配列を使用すると、array.length = 0;を設定するだけで正確にこれを行うことができますが、TypedArrayを使用するとどうなりますか?

次の結果は、メモリができるだけ早く解放されますか?

var testArray = new Uint8Array(buffer); 

///Do stuff with testArray 

tesArray.length = 0; 

それともTypedArrayは、単にArrayBufferオーバービューであることから、私はまた、実際のバッファそのものをクリアする必要があるでしょうか?もしそうなら、どうですか?

+0

なぜtestArray = nullを使用しないのですか?私はこのアプローチが多く使われているのを見ました。 – FailedUnitTest

+0

配列をnullにすることが本当に効果的な方法であり、実際に効果的であれば、それを使用します。しかし、私の懸念は、実際の基礎となるバッファそのものが後に残され、後でGCによってクリーンアップされるということでした。 – gordyr

+0

良い点は、私はGCが今これを世話できるほどスマートだと考えました。 – FailedUnitTest

答えて

3

型付き配列への参照をNULLにすると十分です。通常の配列とは対照的に、.length = 0の設定は機能しません。length propertyは読み取り専用です。

実際にガベージコレクタに問題が発生した場合は、新しいバッファを常に割り当てて解放する代わりに、に同じバッファを繰り返し再利用することをおすすめします。

関連する問題