gpt4 book ai didi

java - JDBC bulkcopy 中可能的内存泄漏

转载 作者:行者123 更新时间:2023-11-30 12:04:21 27 4
gpt4 key购买 nike

我正在编写一个 Spring Boot 2 应用程序,我正在使用 SQL 批量复制功能在 SQL Server 2012 数据库中插入多条记录。每次我插入 ~700 行时,我都会泄漏 600 MB

我已经尝试了 Microsoft 驱动程序版本 6.4.0.jre8 和 7.2.2.jre8,但没有任何变化。我试过为 tomcat 更改 Hikari 连接池,但结果是一样的。

为了调用 Microsoft API,我使用了包装器框架 (https://github.com/bytefish/JSqlServerBulkInsert),但代码很干净:

 public void saveAll(Connection connection, SQLServerBulkCopyOptions options, Stream<TEntity> entities) {
// Create a new SQLServerBulkCopy Instance on the given Connection:
try (SQLServerBulkCopy sqlServerBulkCopy = new SQLServerBulkCopy(connection)) {
// Set the Options:
sqlServerBulkCopy.setBulkCopyOptions(options);
// The Destination Table to write to:
sqlServerBulkCopy.setDestinationTableName(mapping.getTableDefinition().GetFullQualifiedTableName());
// The SQL Records to insert:
ISQLServerBulkRecord record = new SqlServerRecord<TEntity>(mapping.getColumns(), entities.iterator());
// Finally start the Bulk Copy Process:
sqlServerBulkCopy.writeToServer(record);
// Handle Exceptions:
} catch (SQLServerException e) {
// Wrap it in a RunTimeException to provide a nice API:
throw new RuntimeException(e);
}
}

当我使用 Eclipse 内存分析器时,我得到了这些结果:

  • 与光:

"One instance of "com.zaxxer.hikari.pool.PoolEntry" loaded by "sun.misc.Launcher$AppClassLoader @ 0x81611758" occupies 640.619.616 (95,94 %) bytes. The memory is accumulated in one instance of "java.lang.Object[]" loaded by "".

Keywords com.zaxxer.hikari.pool.PoolEntry java.lang.Object[] sun.misc.Launcher$AppClassLoader @ 0x81611758 "

  • 使用 Tomcat:

"One instance of "org.apache.tomcat.jdbc.pool.ConnectionPool" loaded by "sun.misc.Launcher$AppClassLoader @ 0x81614fa0" occupies 640.805.840 (95,92 %) bytes. The memory is accumulated in one instance of "java.lang.Object[]" loaded by "".

Keywords java.lang.Object[] sun.misc.Launcher$AppClassLoader @ 0x81614fa0 org.apache.tomcat.jdbc.pool.ConnectionPool"

最佳答案

不是司机。我在一个方法中使用了一个列表,并期望在方法范围之后被收集。我将引用分配给 null(之前我清除了集合)并且 GC 可以收集它。

关于java - JDBC bulkcopy 中可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57167454/

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