Servlets 关闭数据库连接(或类似资源):最后{}v/s Finalize()
我最近在一次采访中被问到这个问题 Q1:在servlet中,应该在哪里关闭数据库连接 答:理想情况下,在我遇到的大多数实际应用程序中,数据库连接在Finally块中关闭 问题2:为什么不使用Finalize方法 答:这取决于申请的要求。它是否要求我们将应用程序保持打开状态,直到达到垃圾收集点,以便我们可以利用资源/对象池,并消除在需要重新建立连接时可能涉及的一些开销,或者想要一个安全的故障保护方法,一旦我们完成连接,它将继续并关闭连接 Q3最终完成或最终确定的利弊是什么?在做出这个决定时你会考虑哪些因素?Servlets 关闭数据库连接(或类似资源):最后{}v/s Finalize(),servlets,jdbc,database-connection,connection-pooling,Servlets,Jdbc,Database Connection,Connection Pooling,我最近在一次采访中被问到这个问题 Q1:在servlet中,应该在哪里关闭数据库连接 答:理想情况下,在我遇到的大多数实际应用程序中,数据库连接在Finally块中关闭 问题2:为什么不使用Finalize方法 答:这取决于申请的要求。它是否要求我们将应用程序保持打开状态,直到达到垃圾收集点,以便我们可以利用资源/对象池,并消除在需要重新建立连接时可能涉及的一些开销,或者想要一个安全的故障保护方法,一旦我们完成连接,它将继续并关闭连接 Q3最终完成或最终确定的利弊是什么?在做出这个决定时你会考虑
问题3的理想答案是什么?千万不要像Joshua Bloch在《高效Java》中所说的那样依赖Finalize
这是一个链接,但是考虑阅读有效的java书
Q1:您应该在哪里关闭servlet中的数据库连接? 我的观点:从分层体系结构的角度来看,您应该有一个类似数据访问层的独立层来处理数据库连接,而不是直接在servlet中。 您应该始终在finally块中关闭\释放资源(数据库连接等) Q2:为什么不在Finalize方法中? 我的观点:通常finally块是有保证的块,即使在出现故障的情况下,代码也会在这里执行。但Finalize方法不能保证在您实际直接/间接调用它时会调用它。垃圾收集器将在收集符合条件的对象之前调用该方法 Q3最终完成或最终确定的利弊是什么? 我的观点:因为不能保证是否会调用finalize(),而且将资源保留到finalize调用之前的错误做法 底线: 尽可能晚地创建/调用资源,并尽可能早地释放资源 可能 希望这会有帮助
干杯 是的,“servet”是一个拼写错误。我的意思是“servlet”。这听起来是一个很好的解释。谢谢