私は、HSQLDBに挿入するArrayListに5700万の文字列を持っています。しかし、私はいつもメモリがなくなり、処理中に"java.lang.OutOfMemoryError:Javaヒープスペース"または"OutOfMemoryError:GCオーバーヘッドの上限"エラーが発生します。Java HSQLDB - 一括バッチ挿入: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();
私は、forループの条件を変更すると、それを変更しないので問題は、Javaの文が接続されているかなり確信しています。
は、私はすべてのexecuteBatch() 後、すべてのexecuteBatch()
- 小さく、より大きなバッチサイズ
- を試してみました