首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

垃圾回收和finalize()解决办法

2012-06-08 
垃圾回收和finalize()我显式的调用System.gc() 它一定会执行我重写的 protected void finalize() 吗? 我

垃圾回收和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.gc()虽然是显式通知JVM可以进行一次垃圾回收
但真正垃圾回收具体在什么时间仍然是不可预料的。
所以你调用了.gc(),不一定马上执行垃圾回收。

[解决办法]
有个方法叫 System.runFinalization();

你调用下,就可以看到你的finalize方法被执行到了
[解决办法]
System.gc()虽然是显式通知JVM可以进行一次垃圾回收
但真正垃圾回收具体在什么时间仍然是不可预料的。
所以你调用了.gc(),不一定马上执行垃圾回收。

热点排行
Bad Request.