JAVA收集器的机制,当它运行时(通常在系统内存低到一定限度时自动运行),会回收不再使用的对象所占用的内存,所以不一定在什么时候回收,这和jvm的回收垃圾的算法又关系。
所以不是不会调用,而是还没有回收,还没有调用

解决方案 »

  1.   

    finalize(),在对象被最终撤消并释放内存之前由java自动调用!
    F f = new F(),对象已经实例化并占用内存了。
    你要想调用finalize(),可以这样:
    F f = new F();
    f=null;
    System.gc();
      

  2.   

    to moumouren(某某人):
    但是我的上述代码会调用finalize()的呀!System.gc();不是用来强迫垃圾回收(执行finalize())的吗???
      

  3.   

    System.gc();不是用来强迫垃圾回收的,它只是激励jvm进行垃圾回收
    也就是说gc只是建议jvm回收垃圾,至于jvm是否立即回收,那就要看jvm是否愿意了!
      

  4.   

    那每次运行上面代码都会调用finalize()又怎么解释呢?
    谢谢!!!
      

  5.   

    public static void main()这句有问题吧。应该是:public static void main(String args[])
       还有其它的,上面说的很清楚了。
      

  6.   

    你在运行new F();时只是相当于在内存中临时占用了一块空间来新建一个对象,但是它没有句柄,所以System.gc();运行时就认为这个已经没有用了,要求jvm收回资源;所以调用finalize();
      

  7.   

    so, I see!
    谢谢大家,尤其是 sgdb(神天月晓) !