关于垃圾收集器的问题。 如果我已经创建了数据库连接并在数据库上执行了一些操作,之后我没有使用连接对象更长时间,垃圾收集器可以释放我的连接。我想稍后再使用这个连接。
编辑:只是为了确认,如果我创建了我的连接是在webapp的上下文级别,那么是什么情况?
答案 0 :(得分:7)
如果您对<{1}}对象保留 strong 引用,则垃圾收集器将永远不会触及您的对象,并且数据库连接将保留。请记住它不能被多个线程使用。
另一方面,如果长时间保持打开连接,某些底层资源(如TCP / IP套接字)可能会被中断。
如果您丢失了对连接的最后一个引用(通过覆盖它或设置为Connection
),垃圾收集器将释放与该连接和连接本身相关的所有Java对象。但它不会释放底层数据库连接,因此您必须始终显式调用:
null
答案 1 :(得分:1)
答案 2 :(得分:0)
只要您保持对它的引用,就不会对连接进行垃圾回收。从理论上讲,你可以随意使用它。
答案 3 :(得分:0)
如果您不再引用连接对象,那么它是垃圾收集的成员,但绝不能保证它将被gc垃圾收集。它完全取决于gc。
如果您希望将来使用它,最好将其作为全局对象。这样你的应用程序将保留一个引用,它不会成为垃圾收集的成员。
答案 4 :(得分:0)
取决于您的连接类型。如果你有强大的参考,那么它不会被垃圾收集,但如果你有弱参考,那么它将有资格获得GC。
如果它由静态或实例级别保存,则不会被垃圾回收。
但是不要长时间保持数据库连接(考虑到每个数据库都有连接数限制),您应该在需要时释放并重新获取。
您还应考虑使用ConnectionPool进行更好的连接管理。