finalize()不知道什么时候才能执行到

解决方案 »

  1.   

    System.gc();
    Runs the garbage collector which deletes objects that are no longer in use.
    也就是说,运行垃圾收集器把不再使用的对象删除。
    当然輸出不是期望的"not checkin"
      

  2.   

    但在進行gc前不是會運行finalize嗎?
    這個例子的用意也就是這樣呀
      

  3.   

    System.gc();要求执行垃圾回收,但是虚拟机不是一定要做
    还有,既然是垃圾回收,就是不再有任何对象引用该类型分配
    的内存地址,但是,你的A对象并没有释放
      

  4.   

    我想这个程序根本就没执行finalize()
      

  5.   

    这是Thinking in java 2nd中的一个例子,希望对你有帮助。
    //: c04:Garbage.java
    // Demonstration of the garbage
    // collector and finalizationclass Chair {
      static boolean gcrun = false;
      static boolean f = false;
      static int created = 0;
      static int finalized = 0;
      int i;
      Chair() {
        i = ++created;
        if(created == 47) 
          System.out.println("Created 47");
      }
      public void finalize() {
        if(!gcrun) {
          // The first time finalize() is called:
          gcrun = true;
          System.out.println(
            "Beginning to finalize after " +
            created + " Chairs have been created");
        }
        if(i == 47) {
          System.out.println(
            "Finalizing Chair #47, " +
            "Setting flag to stop Chair creation");
          f = true;
        }
        finalized++;
        if(finalized >= created)
          System.out.println(
            "All " + finalized + " finalized");
      }
    }public class Garbage {
      public static void main(String[] args) {
        // As long as the flag hasn't been set,
        // make Chairs and Strings:
        while(!Chair.f) {
          new Chair();
          new String("To take up space");
        }
        System.out.println(
          "After all Chairs have been created:\n" +
          "total created = " + Chair.created +
          ", total finalized = " + Chair.finalized);
        // Optional arguments force garbage
        // collection & finalization:
        if(args.length > 0) {
          if(args[0].equals("gc") || 
             args[0].equals("all")) {
            System.out.println("gc():");
            System.gc();
          }
          if(args[0].equals("finalize") || 
             args[0].equals("all")) {
            System.out.println("runFinalization():");
            System.runFinalization();
          }
        }
        System.out.println("bye!");
      }
    } ///:~
      

  6.   

    System.gc(),在你的main方法中进行,但是那个时候,aa还引用那块内存,所以不会被回收。如果你改成:
    public static void main(String[] args) 
    {
    new A();
    System.gc();
    }
    就会得到你想要的结果