在session.close()之后设置session = null是否有意义?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在session.close()之后设置session = null是否有意义?相关的知识,希望对你有一定的参考价值。

考虑这段代码:

public void foo(){
       try{
        //some cool statements here
      }
      finally {
         if(session != null){
             session.close();
             sesssion = null;
          }
     }
   }

由于会话已关闭,分配给会话的值是否有意义?请提供一些有价值的见解。

答案

将变量设置为null在对象本身变得无用的情况下非常有用,在此示例中为闭合会话。这些对象通常记录在调用close或类似方法之后,对该对象的所有进一步操作都将失败,例如,通过投掷IllegalStateException。在这些情况下,删除这样的实例是有意义的,特别是如果代码的其他部分期望并检查空实例作为“无连接”的标志。

如其他答案中所述,垃圾收集不是将变量设置为null的正当理由。

另一答案

将局部变量设置为null是不必要的,因为它是CERT Oracle安全编码标准的Recommendations的一部分

将本地引用变量设置为null以“帮助垃圾收集器”是不必要的。它会增加代码的混乱,并使维护变得困难。 Java即时编译器(JIT)可以执行等效的活动分析,大多数实现都是这样做的。

以上是关于在session.close()之后设置session = null是否有意义?的主要内容,如果未能解决你的问题,请参考以下文章

mybatis一级缓存和二级缓存

在hibernate中先commit再关闭session和先关闭session再commit有啥区别

javaweb之HttpSession对象

通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题

websocket注意“oldSession我们最好关闭“”

NHibernate ISession Flush:何时何地使用它,为啥?