我正在尝试创建一个大小为10000000 000 double [400]数组的ArrayList作为我的神经网络的训练数据,但是当列表达到大约200000时,我的内存空间不足(已分配2GB)该程序)。我需要一种在不耗尽堆空间的情况下创建和访问这样的列表的方法。
下面有一个我要完成的示例。
import java.util.ArrayList;
import java.util.Random;
public class Example {
static private ArrayList<double[]> data;
public static void main(String[] args) {
data = new ArrayList<double[]>();
double[] randomArr = new double[400];
Random random = new Random();
for(int i = 0; i < 10000000; i++) {
randomArr = random.doubles(400, 0, 1).toArray();
data.add(randomArr);
if(i % 10000 == 0) {
System.out.println(i);
}
}
}
}
在370 000次迭代之后,程序引发java.lang.OutOfMemoryError-exception。有没有办法解决这个问题(无需分配更多的内存),并且仍然能够相当快地遍历ArrayList数据?