没有
有很多用public void destroy()释放资源

解决方案 »

  1.   

    没有,有释放资源的方法。如finalize()方法,垃圾回收过程中被系统自动调用。
      

  2.   

    析构除了可被用来释放内存资源之外,还可以用来释放其他资源,如socket资源,
    thread资源/同步信号资源,文件资源,硬件资源等。好象只有finalize()方法会在该object被GCed的时候被系统自动调用。但何时
    不保证(比如GC很晚才发生或根本没发生),由哪个线程出手来调用finalize()
    也不规定,故finalize()不是非常可靠的方法。比较可靠的方法是自己写close方法,并在把该object设为null之前,自己主动地在
    一个合适的线程里调用这个close方法
      

  3.   

    重载finalize()方法,之后在想要释放时或者超出作用域的时候调用System.gc()
      

  4.   

    谢谢各位的指点,我是想释放一个类实例占用的资源。
    但是又不想调用其中的方法,而是要自动释放,所以想到了"析构".
    现在已经找到了一个方法,
    可以先调用system.runFinalization(),再调用system.gc()来触发重载了finalize()方法的类方法来释放资源,相当于"析构"。
    但是不知道,如果一个线程起来后,隔一段时间这样运行一次,对系统性能有什么影响?
      

  5.   

    java的垃圾收集是虚拟机管理的。调用system.gc()只是提醒jvm做垃圾收集,并不是一定会实现。这还引起了java高手的一场论战。所以没有必要隔一段时间运行一次System.gc。因此finalize()并不一定会被调用。就象hahaha88兄说的一样。
      

  6.   

    但是我使用system.runFinalization(),再调用system.gc()每次都成功啊, 我现在是想知道这样对系统性能有什么影响,谢谢.
      

  7.   

    thinking in java 中对这个问题有非常详细的描述,可以参看!
      

  8.   

    没有!JAVA有垃圾收集器,如果要自己来做可以用finialize()
      

  9.   

    当你的程序有大量耗时运算,或主机环境有别的程序抢占cpu资源,以使你的jvm没有cpu时间片来运行垃圾收集线程(该线程优先级最低),就会有我和hahaha88兄的情况。你的程序没有大量计算,或你的计算机较快所以每次都成功。因为system.gc()并不是直接启动垃圾收集,所以就算有影响,也不会有很多的性能损失。本来finialize()就是用来给你释放某些外部资源的。比如,你用jni,其中分配了内存,那么内存的释放就可以放在finialize()(参见thinking in java)。
      

  10.   

    谢谢 hahaha88、lusxiao 以及各位的指点,
    那么说来在cpu被占用的情况下先调用system.runFinalization(),再调用system.gc(),也并不能保证它一定会成功,问题是如果这么调用了,只要cpu空闲下来就会处理吗?
    还有,如果我在一个线程里频繁做system.runFinalization()和system.gc(),对机器性能影响不大,是吗?谢谢~!