创建和访问大型ArrayList,而不会耗尽堆空间

时间:2019-01-13 12:38:30

标签: java memory arraylist heap-memory

我正在尝试创建一个大小为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数据?

0 个答案:

没有答案