gpt4 book ai didi

Java HSQLDB - 批量插入 : OutOfMemoryError: GC overhead limit exceeded

转载 作者:行者123 更新时间:2023-12-01 08:48:25 24 4
gpt4 key购买 nike

我在 ArrayList 中有 5700 万个字符串,我想将其插入到 HSQLDB 中。但我总是耗尽内存并在此过程中收到 “java.lang.OutOfMemoryError:Java 堆空间”“OutOfMemoryError:超出 GC 开销限制” 错误。

我尝试了建议的任何解决方案 here .

        DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
String now = df.format(new Date());
long iteration = 0;
int i, size, totalSize;
size = totalSize = values.size();
PreparedStatement statement = connection.prepareStatement("INSERT INTO primes (P_VALUE, DATE_FOUND) VALUES (?, ?);");
while (size > 0) {
for (i = 0; i < 1000000 && i < size; i++) {
iteration++;
statement.setString(1, values.get(i));
statement.setString(2, now);
statement.addBatch();
}
values = values.subList(i, size);
size = values.size();
statement.executeBatch();
}
statement.closeOnCompletion();

我很确定问题与 Java 语句有关,因为更改 for 循环条件不会改变它。

我试过了

  • 更小和更大的批量
  • 在每次executeBatch()之后覆盖该语句
  • 语句在每次executeBatch()后关闭
  • 每次executeBatch()后提交

最佳答案

看起来您正在使用内存表,并且当您插入大量行时内存就会耗尽。

尝试使用基于文件的数据库创建缓存表。然后您可以尝试不同的批量大小。

您还必须在每批之后提交。所有插入的行都保留在内存中,直到您提交。

关于Java HSQLDB - 批量插入 : OutOfMemoryError: GC overhead limit exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42540345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com