2012-09-05 60 views
3

考慮下面的代碼片斷:即使超出範圍,我是否應始終關閉CachedRowSet?

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

如果絕對沒有其他引用,它將在下次執行垃圾回收時成爲垃圾回收的候選者;但是當方法結束時不一定會發生這種情況。它會花費你什麼來關閉它嗎? –

回答

3

從:http://docs.oracle.com/javase/1.5.0/docs/api/javax/sql/rowset/CachedRowSet.html

CachedRowSet對象是一個斷開連接的行集,這意味着它 利用到其數據源只簡單的連接。它將 連接到其數據源,同時它正在讀取數據,以便使用 行填充本身,並再次將更改傳播回其基礎 數據源。剩下的時間,CachedRowSet對象是 斷開連接,包括其數據正在被修改。斷開 使得RowSet對象更加精簡,因此更容易傳遞給另一個組件。例如,可以將斷開連接的RowSet對象序列化並通過線路傳遞給諸如個人數字助理(PDA)等瘦客戶機。

,這意味着不存在連接問題,關閉 ,這樣你們可以讓它

但我認爲它很好的做法,始終關閉你開什麼,它不會離開到你平時不是GC觸摸或告訴何時運行。

給出足夠大的服務器有很多請求,如果它導致打開文件描述符,它最終可能會成爲一個問題。 確保資源關閉始終是最好的