gpt4 book ai didi

java - JDBC 中关闭 ResultSet 后的内存/堆状态

转载 作者:行者123 更新时间:2023-12-02 09:49:03 32 4
gpt4 key购买 nike

  1. ResultSet 从数据库中获取记录。
  2. 使用结果集对象后,我们最终关闭结果集。

问题是,一旦调用 rs.close() ,它会释放从内存中删除获取的记录吗?或者当JVM空间不足时,会调用垃圾收集器删除resultSet吗?

如果JVM在内存不足时调用GC,那么在java程序中手动调用垃圾收集器来释放空间是否是一个好习惯?

最佳答案

结果集通常通过使用数据库光标来实现。调用 resultSet.close() 将释放该游标,因此它将立即释放数据库中的资源

结果集读取的数据通常以记录 block 的形式接收。调用 resultSet.close() 可能会“释放”最后一个 block ,使其符合 GC 条件,但一旦 resultSet 本身超出范围并变得符合条件,这种情况无论如何都会发生对于 GC,这很可能在调用 close() 之后发生,因此调用 close() 是否提前释放 Java 内存并不重要。

Java 内存只能通过 GC 运行来释放。您无法控制何时发生(调用 System.gc() 只是一个提示,您无法控制)。

你正在考虑错误的事情。您应该关注的是:

  • 确保资源1始终尽快关闭,以释放数据库系统资源。

    最好使用try-with-resources来完成此操作。

  • 确保不会保留太多数据,例如如果您可以在获取数据时对其进行处理,则不必为检索到的每一行创建对象。

    这通常是内存泄漏发生的情况,而不是 JDBC 驱动程序内部发生的情况。

1) 例如结果集语句连接输入流输出流读取器Writer

关于java - JDBC 中关闭 ResultSet 后的内存/堆状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56447416/

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