垃圾回收器在执行时与finalize方法有什么关系啊

解决方案 »

  1.   

    垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这里面涉及到很多东西,比如对象空间树等内容)。
      不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这时就需要我们覆盖默认的方法来实现对这部分内存的正确释放和回收(比如C++需要delete)。
      总之,finalize相当于析构函数,他是垃圾回收器回收一个对象的时候第一个要调用的方法。不过由于Java的垃圾回收机制能自动为我们做这些事情,所以我们在一般情况下是不需要自己来手工释放的。  可参考http://www.phome.asia/forum/thread/22686.html
      

  2.   

    应该是可能会调用finalize方法吧。
      

  3.   

    垃圾回收器回收对象时会调用该对象的finalize方法。finalize()不一定在对象终结时被调到,比如执行System.exit(0),所有对象都会销毁,但是它们的finalize()没有被调到。 所以为保险起见,不应该在finalize()里面做一些释放资源的操作。