我经常改变数组的维度。例如:
Window = new float[bufferSizeWords];
然后我使用同样的数组,但是长度加倍。
Window = new float[2*bufferSizeWords];
由于我没有显式控制垃圾回收,我有什么方法可以使这种使用内存更加高效?在其中使用Window=null
会有任何帮助吗?
数组很大,在旧款智能手机上会导致内存不足异常...
ArrayList
。在构造时仍然可以选择初始大小。如果超出了初始容量,它会自动加倍。当我们增加数组的大小时,我们无法控制其位置,因为其末尾旁边的内存可能被其他对象占用,因此需要将其重新定位到另一个可以容纳它的空闲区域。这适用于ArrayList对象和本机数组。
如果找不到这样的区域,则gc在抛出OutOfMemoryError之前肯定会运行。也就是说,没有必要显式调用gc以避免此类错误。在我看来,显式调用gc很少是一个好主意。
为了避免重定位您的数组并比请求连续的内存区域更灵活,您最终可以构建自己的类来管理一组数组(即数组的数组),每个块都是一些固定大小的数组,在需要时分配并在不再需要时释放(置为空)。确保在不再需要时释放(置为空),以避免内存泄漏。