在finalize方法中关闭数据库连接安全么? 如果不安全请阐述下嘛原因 另请说下finalize大家平常都用么? 用的话都怎么用?

解决方案 »

  1.   

    建议每次使用的时候,在finally里close资源,你引用的时候某个Hold资源的类的时候,你就需要关注它的释放时机。不建议在finalize里释放。像数据库连接资源,即使对象被销毁,资源也不会被释放,关键是使用的时候要注意。
      

  2.   

    在finally里关闭连接吧finalize是gc回收垃圾时调用的方法 没在这里关闭过数据库连接
      

  3.   

    finalize是用来回收垃圾的但是就算手动调用finalize 也不知道他什么时候回收
      

  4.   

    好像不好这样做吧,那个方法有时候从始至终都不会被调用。还是在程序流程的必经之路上释放资源或在finally中做吧。
    我到现在为止从未重写过这个方法来做些什么。
      

  5.   

    有想法不过,肯定是不现实的。会造成极大的资源浪费。
    GC有时候回收会很慢再说。。最近发现。。GC有一个阀值,就是说超过那个值了(应该是个×%的样子)才会去做system。gc()。。所以,一旦有大量的数据需要操作的时候,就出现内存溢出了好几次了该死的。
      

  6.   

    对象的销毁时间是不确定
    可能对象已经不用了,但不被回收,如果这样你在finalize方法里释放连接,连接就不会在使用完后立即释放连接的释放要在调用完数据库操作后释放,一般都放在finally{}块中,并且调用专门的清理方法
      

  7.   

    我觉得蛮好的,我就这么做过,提供一个对象给其它组件,我跟本不知道其它组件什么时候不用这个对象了,只好在finalize里做destroy操作。
      

  8.   

    finalize一般不建议使用,java采用的是自动回收机制,不同于c++,delphi等需要手动销毁对象的语言。
    采用finalize就等于强制销毁对象
      

  9.   

    各位同志不要以为物品打错字 我似乎说这个呢 finally我不是不知道 只是试探性的问下这个finalize能做些什么
      

  10.   

    finalize垃圾回收器会自动调用的 不用自己调用 自己调用也没用 所以就不要用
      

  11.   

    java虚拟机对象回收的条件:
    1、垃圾回收器发现该对象不可到达,即没有任何一个引用指向堆空间
    2、finalize方法已经被执行
    3、对象空间已被重用
      

  12.   

    最好不要用 finalize方法 因为这个方法是JVM自动 并且时间不固定的调用
    而且整个程序都完了 finalize方法也没调用过一次 
      

  13.   

    finalize 这个一直没用过,如果用来关闭连接,想法听上去可以!没用过,呵呵.有想法! 可能关闭的时间不够及时。如果网站有点点击率。那么就可能造成连接数过多...
      

  14.   

    我也想知道,finalize方法还能做什么用,目前看来似乎确实没什么用。
      

  15.   

    如果你是当做销毁垃圾用,而且是自动让jvm来调用的话,那是很不安全的。你可以显示的自己调用,但我感觉很别扭
    ,你还不如单独写一个 xxxClose()的方法呢