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垃圾回收