如何防止java.lang.OutOfMemoryError:for循环期间超出GC开销限制?

时间:2018-11-01 22:44:52

标签: java memory garbage-collection out-of-memory bigdata

我总是在for循环的随机时间内收到GC开销限制错误,在该循环中,我遍历了从Pgres查询的200K +记录。如何防止此错误?

这是当我收到OutOfMemoryError时,要经历200K +条记录:

 final List<CustomerCSV> customerCSVs = new ArrayList<>();
 for (Record record : results) {
     final Iterable<String> tags = 
     Iterables.transform(record.get(CUSTOMER.TAGS), (part) -> StringUtils.chop(part.toString().substring(1)));
     customerCSVs.add(new CustomerCSV(record.get("name"), record.get("email"), Joiner.on(",").join(tags));
}

1 个答案:

答案 0 :(得分:0)

您是否尝试过增加堆内存大小?

尝试在运行时添加以下参数: java -Xmx ** m

我相信以上只是临时解决方案。另外,我建议您按顺序获取记录。

https://www.postgresql.org/docs/9.5/static/sql-createsequence.html