java - 如何测试PreparedStatement是否会耗尽内存

标签 java postgresql jdbc prepared-statement

所以我有一些使用 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/

相关文章:

postgresql - 临时表不是已知变量

java - (JDK 1.6 和 ojdbc6.jar)与(JDK 1.5 和 ojdbc14.jar)

java - API 级别 28 的 Android-ProviderTestCase2 不工作

python - 库未加载 : libssl. 1.0.0.dylib 原因:找不到图像

java - 如何将 JPanel 中的 TextFields 中输入的值添加到数组中?

sql - 每个不同值中选择 5 个

java - LIKE 中的单引号进入 JDBC 准备语句

sql-server - Spark 和 MSSQL 插入速度

java - 如何设置静态宽度以在 SWT 中查看

java - 在 Android 应用程序中实现 google plus 登录时出错