我正在使用ArrayList数据结构处理csv文件。我的机器非常强大: 内存:8GB RAM 处理器:4个CPU,每个i5 Intel core 2.5GHz。
在eclipse中,我使用运行配置的vm参数面板分配了-Xmx5120m(5GB RAM用于java虚拟机)。
如果我的ArrayList<ArrayList<String>>
超过约468000 X 108,我仍然会遇到“outofmemory java heap space”的问题。我使用arraylist是因为我感觉它最舒适,并且易于处理我的目的数据。
实际上,我正在使用这个二维数组进行基于列的上下文处理,例如:
arraylist.get(i).get(0)
where
0 < i < 468000
一个arrayList可以代表一列。由于我要进行的操作(例如用另一列替换一列、复制一列、在arrayList中任意位置插入一列等),我只能想到使用arrayList,因为它在平均情况下添加或插入元素具有摊销常数时间。
现在我的问题是:
除了arrayList之外,还有哪些数据结构可以让我达到比468000 X 108大得多的数量级(例如像(833 * 1000000) X 108这样),并且能够执行我上面提到的所有操作?(但我仍然希望能够使用我的机器容量进行操作)
我可以考虑按顺序处理所有这些内容,也就是先处理468000 X 108并将其写入csv文件,然后再将其加载到468000 X 108的arrayList中并将其写入不同的文件等等...
我不认为我已经达到了arrayList的极限。
我会非常感激任何形式的帮助。
833 * 1000000 * 108
是条目数。每个条目至少为8字节(64位VM上的引用大小)。因此,仅对象引用所需的内存大小就为670 GiB。 - rlibby