2017-05-11 87 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是只读的。

如果你真的遇到垃圾收集器的问题,我建议尝试重复使用反复使用同一个缓冲区,而不是一直分配新的,并希望它们被释放。

相关问题