垃圾回收和finalize()
我显式的调用System.gc(); 它一定会执行我重写的 protected void finalize() 吗? 我感觉书上说的是,但是我写的程序它没有执行。
package pack1;
class Garbage {
static int count=0;
Garbage()
{
count++;
}
protected void finalize()
{
System.out.println("The garbage is destroyed!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Garbage();
new Garbage();
System.gc();
}
}
运行后没有打印任何东西。
------解决方案--------------------System.gc()虽然是显式通知JVM可以进行一次垃圾回收
但真正垃圾回收具体在什么时间仍然是不可预料的。
所以你调用了.gc(),不一定马上执行垃圾回收。
------解决方案--------------------GC的线程优先级比较低,sleep一下就可以看到了
Java code
new Garbage();
Thread.sleep(100);
System.gc();
------解决方案--------------------
多建几个对象也可以看到一些效果.
------解决方案--------------------
执行了一下
调用System.out.println("The garbage is destroyed!"); 了
------解决方案--------------------
------解决方案--------------------
有个方法叫 System.runFinalization();
你调用下,就可以看到你的finalize方法被执行到了
------解决方案--------------------
System.gc()虽然是显式通知JVM可以进行一次垃圾回收
但真正垃圾回收具体在什么时间仍然是不可预料的。
所以你调用了.gc(),不一定马上执行垃圾回收。