conn可以被回收但是,socket连接就没法释放了,这是最关键的

解决方案 »

  1.   

    只要还存在对连接对象的引用,就不会被垃圾回收。垃圾回收的标准是回收没有被引用的对象,而不以作用范围来衡量,这和C++里的局部对象不同。即使在C++里,new 一个局部对象,当它超出作用范围时,也不会被自动析构,需要人工 delete。另外,JVM的垃圾回收只能回收对象所占用的内存,不能自动回收对象所占用的资源,这是JVM垃圾回收的一个缺陷 :-(
      

  2.   

    应该不能的,jvm垃圾回收机制只能回收由jvm本身分配的内存
      

  3.   

    还有,Jvm并不会优先回收某些珍稀资源(例如数据锁),而且也不能人工指定回收资源的优先级别
      

  4.   

    看来是必须用connection.close();来关闭才行!
    即使是中途抛出例外,也得在适当得地方关闭连接才行!
      

  5.   

    如果不管,什么情况下,它能自动被关闭?
    比如一个普通的application类,中间建立了一个连接,main方法运行完了,这时连接应该是自动关了吧!
    jsp,session bean中的连接是么时候能自动关闭?
      

  6.   

    加上:
               finally
               {
                   if (conn != null)
                   {
                       try
                       {
                           conn.close ();
                           System.out.println ("Database connection terminated");
                       }
                       catch (Exception e) { /* ignore close errors */ }
                   }
               }
    用finally来释放。
      

  7.   

    有时返回值是ResultSet对象,不能在函数里关闭Connection对象!