关闭数据库连接(或类似资源):最后{} v / s Finalize()

时间:2013-11-20 14:43:28

标签: servlets jdbc database-connection connection-pooling

我最近在接受采访时被问到这个问题。

  

Q1:在哪里关闭servlet中的数据库连接?

     

答:理想情况下,在我遇到的大多数实际应用中,数据库连接在Finally块中关闭。

     

Q2:为什么不在Finalize方法中?

     

答:这取决于应用程序的要求。是否要求我们将应用程序保持打开状态,直到我们达到垃圾收集点为止,以便我们可以利用资源/对象池并消除可能涉及的一些开销,如果连接需要再次建立,或者想要安全的故障安全方法,一旦我们完成连接就会继续并关闭连接。

     

Q3在Last或Finalize中关闭它有什么利弊?在做出决定时你会考虑哪些因素?

问题3的理想答案是什么。

2 个答案:

答案 0 :(得分:1)

不要依赖于Joshua Bloch在Effective Java中指出的Finalize

这是一个链接,但请考虑阅读有效的java书籍

the link

the book

答案 1 :(得分:0)

Q1:在哪里关闭servlet中的数据库连接?

我的观点:从分层架构的角度来看,你应该有一些像数据访问层这样的单独层来处理数据库连接而不是直接在你的servlet中。 您应该始终关闭finally块中的\ release资源(数据库连接等)。

Q2:为什么不在Finalize方法中?

我的观点一般来说,即使在失败条件下,最终块也是保证块,你的代码将被执行。但是,当你实际直接/间接地调用它时,Finalize方法无法保证它会被调用。垃圾收集器将在收集符合条件的对象之前调用该方法。

Q3在Last或Finalize中关闭它的优缺点是什么?

我的观点:由于无法保证是否会调用finalize()以及保留资源直至敲定调用的不良做法。

底线:

  

尽可能晚地创建/调用资源,并尽早释放资源   可能的。

希望这会有所帮助..

干杯!