数据库连接上的Java垃圾收集器

时间:2012-04-26 07:19:43

标签: java jdbc

关于垃圾收集器的问题。 如果我已经创建了数据库连接并在数据库上执行了一些操作,之后我没有使用连接对象更长时间,垃圾收集器可以释放我的连接。我想稍后再使用这个连接。

编辑:只是为了确认,如果我创建了我的连接是在webapp的上下文级别,那么是什么情况?

5 个答案:

答案 0 :(得分:7)

如果您对<{1}}对象保留 strong 引用,则垃圾收集器将永远不会触及您的对象,并且数据库连接将保留。请记住它不能被多个线程使用。

另一方面,如果长时间保持打开连接,某些底层资源(如TCP / IP套接字)可能会被中断。

如果您丢失了对连接的最后一个引用(通过覆盖它或设置为Connection),垃圾收集器释放与该连接和连接本身相关的所有Java对象。但它不会释放底层数据库连接,因此您必须始终显式调用:

null

答案 1 :(得分:1)

简而言之:JVM垃圾收集:如果您或其他任何人对某个对象有引用,那么JVM就不允许对其进行垃圾回收。如果你没有对它的引用,那么JVM就不会 来垃圾收集它直到它想要。

答案 2 :(得分:0)

只要您保持对它的引用,就不会对连接进行垃圾回收。从理论上讲,你可以随意使用它。

答案 3 :(得分:0)

如果您不再引用连接对象,那么它是垃圾收集的成员,但绝不能保证它将被gc垃圾收集。它完全取决于gc。

如果您希望将来使用它,最好将其作为全局对象。这样你的应用程序将保留一个引用,它不会成为垃圾收集的成员。

答案 4 :(得分:0)

取决于您的连接类型。如果你有强大的参考,那么它不会被垃圾收集,但如果你有弱参考,那么它将有资格获得GC。

如果它由静态或实例级别保存,则不会被垃圾回收。

但是不要长时间保持数据库连接(考虑到每个数据库都有连接数限制),您应该在需要时释放并重新获取。

您还应考虑使用ConnectionPool进行更好的连接管理。