JDBC垃圾回收
回答
如果您的代碼在完成使用後未關閉ResultSet
s或PreparedStatement
s,那麼應用程序會在數據庫中佔用稀有資源(如遊標)。參見,例如:
- ResultSet not closed when connection closed?
- What happens to the original resultSet when it is returned from a method into a new object?
垃圾收集器並不知道關閉ResultSet
秒或PreparedStatement
什麼事,所以GC不會自動的照顧,對你。會怎樣? Java 7's try
-with-resources statement!
我不是這裏的專家,但我不認爲GC可以收集,因爲PSs與數據庫連接相關聯,所以不會收集垃圾。 呦可以看看這裏: http://www.theserverside.com/news/1365244/Why-Prepared-Statements-are-important-and-how-to-use-them-properly
您必須顯式關閉完成後使用它們的ResultSet和Statement對象。這適用於您在使用JDBC驅動程序時創建的所有ResultSet和Statement對象。司機沒有終結方法;清理例程由ResultSet和Statement類的close()方法執行。如果您沒有明確關閉您的ResultSet和Statement對象,則可能會發生嚴重的內存泄漏。您也可能會用完數據庫中的遊標。關閉結果集和語句會釋放數據庫中相應的遊標;如果只關閉結果集,光標不會釋放
如果我不關閉結果集或預處理語句,它們將被關閉 並由垃圾收集器發佈。
resultset
和preparedstatment
被關閉,通過顯式調用close
方法。垃圾收集器不會關閉這些。我不打電話close
,那麼oracle的遊標不會在oracle端釋放。
Will they be released by the garbage collector.
通常一個物體變得有資格在Java垃圾收集在以下情況:
- 明確設置爲NULL對象的所有引用如object = null
- 在塊內創建對象,並在控件退出該塊時引用超出範圍。
- 父對象設置爲空,如果一個對象擁有另一個對象的引用,並且當您設置容器對象的引用爲null,則子對象或包含對象將自動變爲符合垃圾回收條件。
- 如果一個對象只有通過WeakHashMap的實時引用,它將有資格進行垃圾回收。
的提問:我問這一個 函數內部的局部變量。
ResultSet在一個方法內創建的對象,沒有關閉並且引用超出範圍,一旦控制權退出該方法。,那麼引用設置爲null,並且對象有資格進行垃圾回收。我說沒有保證資格。底層的Oracle遊標仍然存在於數據庫中,因爲你沒有關閉。
- >如果我不關閉ResultSet或用預處理會發生什麼?他們會被垃圾收集器關閉並釋放嗎?
這樣就會降低數據庫和應用程序的性能。您必須關閉或處置JDBC resource properly。
至close or dispose
(JDBC資源)對象表示這些對象現在可用於垃圾回收,GC將釋放已獲取的任何JDBC
資源。
如果是ResultSet
對象,當調用Statement.close()
方法時它會自動關閉。您可以撥打ResultSet.close()方法,如果你想明確地關閉ResultSet
對象(閱讀文章 - 5.1.20 Closing a ResultSet Object)
看一看文章 - Best Practice: Closing and releasing JDBC resources和Enhancements in Java SE 7 and JDBC 4.1(文字從這篇文章 - 特點:使用一試的能力-with資源語句類型連接,ResultSet和語句的自動關閉資源)
- 1. java垃圾回收
- 2. Java:垃圾回收
- 3. Python垃圾回收
- 4. C#垃圾回收
- 5. Erlang垃圾回收
- 6. java - 垃圾回收
- 7. JS垃圾回收
- 8. requestAnimationFrame垃圾回收
- 9. vb.net垃圾回收
- 10. ColdFusion垃圾回收
- 11. PhoneGap垃圾回收
- 12. Chrome垃圾回收
- 13. Java:垃圾回收
- 14. Javascript垃圾回收
- 15. 回收垃圾回收問題
- 16. 垃圾回收無法回收BitmapImage?
- 17. 刪除根垃圾回收
- 18. AIR for iOS垃圾回收
- 19. Java垃圾回收器
- 20. Rebol&Red垃圾回收
- 21. PHP5:SplObjectStorage垃圾回收
- 22. 線程垃圾回收
- 23. 噓,垃圾回收器
- 24. python對象,垃圾回收
- 25. Spidermonkey和垃圾回收
- 26. Java7 vs java5垃圾回收
- 27. context.detach - 用於垃圾回收
- 28. c#和垃圾回收
- 29. 垃圾回收太慢
- 30. Ruby/Rails垃圾回收