所以我有一些使用 JDBC 的 java 代码,使用准备好的语句将数据插入到 PostgreSQL 数据库中,该语句看起来有点像这样:
PreparedStatement statement = // prep statement
for (int value: values) {
statement.setInt(1, value);
statement.addBatch();
}
statement.executeBatch();
问题是,我偶尔会遇到异常 java.lang.OutOfMemoryError: Java heap space
。我环顾四周,但没找到任何东西;如何测试该语句是否即将耗尽内存以便我可以执行批处理。像这样的事情:
PreparedStatement statement = // prep statement
for (int value: values) {
statement.setInt(1, value);
statement.addBatch();
if (statement.currentSize() + sizeof(int) > statement.mazSize()) {
statement.executeBatch();
}
}
statement.executeBatch();
感谢您的帮助。
最佳答案
没有可靠的方法可以提前查明实例化是否会失败。
但是,更重要的是:您可能误用了 JDBC 批处理工具,该工具用于解决插入多行时的网络往返开销问题。任何超过 100 的批量大小都会显示 yield 递减,并且实际上可能会导致速度变慢。
因此,更改批处理策略以使用较小的两位数整数的固定批处理大小。
关于java - 如何测试PreparedStatement是否会耗尽内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282738/