2009-10-20 43 views

回答

4

你應該提供更多的細節,比如你正在使用哪個框架或者什麼。

無論如何,你使用JDBC?如果是這樣,您應該使用它們各自的close()方法來關閉以下對象:Statement,ResultSet和Connection。

6

您必須始終關閉您的所有連接,語句和結果集。

如果沒有,更有可能你不能從池中獲得比內存泄漏更多的新連接。

1

我沒有一個源代碼,但我相信(如果我記得沒錯,已經有一段時間了,因爲我已經觸及JDBC),它依賴於JDBC驅動程序實現。您應該始終關閉連接並清理乾淨,因爲並非所有的JDBC驅動程序都爲您完成(儘管有些可能)。

這回到我喜歡遵循的規則 - 如果我創建或打開某些東西,我負責刪除或關閉它。

3

假設您使用JDBC,答案是肯定的。如果您沒有關閉連接,那麼JDBC驅動程序可能會嘗試在finallizer中關閉它,但這可能會導致連接長時間處於打開狀態,從而導致資源問題(數據庫連接的數量允許在一個時間是有限的)。通常,JDBC編程是使用數據庫池完成的,而不關閉連接將意味着池將很快耗盡可用連接。

某些應用程序服務器(例如JBoss)會檢測連接何時未關閉,如果正在管理事務,則會關閉它,但不應該依賴於此。

當然一些JDBC驅動程序不是純Java驅動程序,在這一點上內存泄漏成爲一種非常現實的可能性。

相關問題