我在阅读thinking in java 的时候,看到一个sample package c06;
import com.bruceeckel.simpletest.*;
import java.util.*;
 
class Shape {
  Shape(int i) {
    System.out.println("Shape constructor");
  }
  void dispose() {
    System.out.println("Shape dispose");
  }
}这个dispose method 里面只有一个println statement,怎样起到回收memmory的作用呢?我是不是要自己写一个其他statement在dispose()里面代替println然后起到回收作用?请指教

解决方案 »

  1.   

    不需要,Java的回收内存是自动的,对用户透明
      

  2.   

    java回收内存是自动的,但是有些情况下you can not rely on finalize() method比如,windows.dispose()是用来关闭windows的method,只是让windows消失,但并不是让整个object释放内存。所以我想知道dispose()里面是不是要加上finalize()还有一个问题,finalize()和system.gc()有什么区别?
      

  3.   

    如果你的程序分配了非Java资源(比如调用了一个C函数并且分配了内存),那么你需要使用finalize()来释放该内存。如果你希望gc马上工作,那么你可以调用system.gc()
      

  4.   

    windows.dispose()是用来关闭windows的method,只是让windows消失,但并不是让
    整个object释放内存。能给我详细介绍下dispose()的作用吗?我曾经遇到过这样的问题,一旦窗口的层次超过三层,第三层的窗口在setVisible(true)之前必须先dispose()掉,否则一旦它被setVisible(true),整个程序就会死掉没反应了,谁能告诉我这是什么原因?为什么三层以下的窗口不会存在这样的问题呢