我们在旧代码中发现了一个错误,其中没有关闭连接.这是一个简单的解决方案,但我想知道我们如何证明它是固定的.可以选择是否使用连接池.对于池化使用,可以很容易地为池添加监视,但是当不使用连接池时,我们如何跟踪那些未闭合的孤立连接?它就像任何其他内存泄漏?
该错误看起来基本上是剪切和粘贴错误.我们有一些管理数据库连接的类,所以看起来大致如下:
OurDBConn conn1 = ConnectionManager.getConnection(); try { // business logic } catch () { // } finally { ConnectionManager.returnConnection(conn1); } /// and then later in the same method OurDBConn conn2 = ConnectionManager.getConnection(); try { // business logic } catch () { // } finally { ConnectionManager.returnConnection(conn1); // NOTE Error: conn1 should be conn2 }
我不知道为什么早期的编码器不只是重用原始连接,但这就是它的本质
(开始编辑/追加)
是的,连接代码也是我们的,所以我可以使用给出的答案.
但是,我不认为我问了正确的问题,尽管下面的答案回答了我提出的问题.我不确定正确的stackoverflow要做的是什么;问另一个问题,还是编辑一个?
我应该问的一个问题是:这些孤立的,未封闭的连接如何在系统性能中表现出来?此外,由于这些连接对象仅存在于某种方法的范围内,因此连接是否有资格进行垃圾回收?然后,如果他们是gc’ed,开放连接是gc’ed的影响是什么?
(结束编辑)