黑马程序员技术交流社区
标题:
调用System.gc()后 finalize()为什么没有执行
[打印本页]
作者:
张丽丽
时间:
2012-6-10 00:24
标题:
调用System.gc()后 finalize()为什么没有执行
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,在下面的程序中,为什么finalize()里面的代码没有被执行啊?
public class Systemgc{
public Systemgc(){
System.gc();
}
public void finalize(){
System.out.println("after System.gc() is called");
}
public static void main(String [] args){
Systemgc d=new Systemgc();
}
}
作者:
江南
时间:
2012-6-10 00:26
Systemgc d=new Systemgc();
在内存中创建了一个Systemgc的对象。
执行System.gc(); 时,这个d不为null,即内存中还有对该Systemgc对象的引用,那么JVM就不会认为这个对象是垃圾,也就不可能回收它。如果把d置为null,过一会JVM发现已经没有这个对象的引用了,就会自动回收,至于这个一会是多一会,那就说不好了,至少我是说不好的
作者:
赵兵锋
时间:
2012-6-10 01:13
public class Main{
String s;
Main(String s){
this.s = s;
}
public static void main(String[] args) {
Main m1 = new Main("one");//这里创建的对象,有一个引用指向该对象,
new Main("two");//创建一个匿名对象,没有引用指向该对象。
System.gc();//强制进行垃圾回收工作,检查内存中没有引用的对象
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println(s);
}
}
//输出:two
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2