【发布时间】:2019-10-20 04:37:09
【问题描述】:
- ResultSet 从数据库中获取记录。
- 使用结果集对象后,我们最终关闭了结果集。
问题是,一旦 rs.close() 被调用,它会释放从内存中删除获取的记录吗? 要么 当JVM面临空间不足时,会调用garabage collector来删除resultSet?
如果JVM在内存不足时调用GC,在java程序中手动调用垃圾收集器来释放空间是不是一个好习惯?
【问题讨论】:
-
在纯 Java 中,不会通过调用方法直接删除任何内容。唯一要问的问题是 - “是否有任何对数据的引用”。如果没有剩下的引用,垃圾收集器会在它认为合适的时候收集它,并且很少需要“帮助”它。
-
问题Does a ResultSet load all data into memory or only when requested? 可以回答您的问题。
ResultSet将块中的记录加载到 JVM 中。一旦该块超出范围,它应该被垃圾回收。 -
“手动调用垃圾收集器是不是一个好习惯” 否。见:Why is it bad practice to call System.gc()?
-
是的,JVM在内存不足时会调用GC,所以no没有理由手动触发GC,正因为如此,JVM已经必要时做,为什么有人要在不必要时执行昂贵的操作?
-
@TimBiegeleisen:谢谢。如果我们多次运行同一个程序,是否会有很多 Out_Of_Scope_Blocks 消耗内存,并且在程序后续运行时,加载一个块所用的时间 = 先前块占用的空闲内存空间 + 新记录块的加载时间
标签: java jdbc garbage-collection