即使 CachedRowSet 超出范围,我是否应该始终关闭它?

3

请看以下代码片段:

public void getUsers() {
    CachedRowSet rowSet = new CachedRowSetImpl();
    .........     /* Initialize the rowset */
    String query = "SELECT user_id FROM users";
    rowSet.setCommand(query);
    rowSet.execute();
    .........    /* Do some job */

}

这里CachedRowSet对象在一个方法中被本地使用。我需要在这里手动关闭它吗?还是当方法执行完毕时,它所持有的内容会被自动垃圾回收?


3
如果没有其他任何引用,它将在下一次垃圾回收时被标记为可回收的对象;但这并不意味着它会在方法结束时立即被回收。关闭它是否会造成影响? - Anthony Grist
1个回答

4
从:http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/CachedRowSet.html CachedRowSet对象是一种断开的行集,这意味着它仅在短暂时间内使用与数据源的连接。它连接到其数据源时,用于读取数据以填充其行,并在将更改传播回底层数据源时再次连接。其余时间,CachedRowSet对象处于断开状态,包括在修改其数据时。断开使RowSet对象更加精简,因此更容易传递给另一个组件。例如,可以将断开的RowSet对象序列化并传递到个人数字助手(PDA)等轻客户端。
这意味着没有关闭连接的问题,所以可以不去管它。
但是,我认为始终关闭你打开的内容而不将其留给GC来处理是好的实践,通常不能触及或告诉何时运行GC。
对于具有许多请求的足够大的服务器,如果它导致打开文件描述符,则最终可能会成为问题。始终确保关闭资源才是最佳实践。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接