我显式的调用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();
}}运行后没有打印任何东西。
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();
}}运行后没有打印任何东西。
但真正垃圾回收具体在什么时间仍然是不可预料的。
所以你调用了.gc(),不一定马上执行垃圾回收。
2.显式调用了System.gc(),它也不一定会立刻调用重写的finalize()?
Thread.sleep(100);
System.gc();
调用System.out.println("The garbage is destroyed!"); 了
1. 显式调用了System.gc(),它也不一定会去立刻回收内存?
2.显式调用了System.gc(),它也不一定会立刻调用重写的finalize()?
楼主这两个问题,相当于一个概念,如果在被回收会调用finalize();
所以判断有没有被回收,看他的finalize()有没有被调用就可以了。
但真正垃圾回收具体在什么时间仍然是不可预料的。
所以你调用了.gc(),不一定马上执行垃圾回收。