【发布时间】:2014-05-02 04:17:19
【问题描述】:
我的数据在这样的数据结构中:
List <List<Long>> data;
我已经说过数千个这样的列表,每个列表中有 10 到数百个元素。我需要一次处理每个列表并从中创建对象以存储到硬盘上的文件中。 我正在使用循环迭代器,例如:
for(List <Long> chunk : data) {
process(chunk);
writeTofile(chunk);
}
但我收到 Java 堆空间的 OutOfMemory 错误。我使用 Eclipse 内存分析器检查了堆,它说由于弱引用导致内存泄漏。此外,process(chunk) 函数是块大小的指数函数。
是为 data.size() 中的每个块创建新的内存空间,还是 data.get(1) 使用的相同空间现在用于 data.get(2)? 有什么帮助可以克服吗? 以下代码在内存利用率方面有什么不同吗?:
List <Long> chunk;
for(chunk : data) {
process(chunk);
writeTofile(chunk);
chunk.clear();
}
在高效垃圾收集方面,数组是否是更好的工具?我已经使用 -Xmx11g 来运行这个程序。请指教。谢谢
【问题讨论】:
-
您得到的错误必须指向代码中的某个部分。你在那里做什么?
标签: java garbage-collection heap-memory weak-references