黑马程序员技术交流社区
标题:
调用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();
}
}
作者:
赵玮_Tom
时间:
2012-6-10 08:28
这个方法应该是不受程序员控制的,JVM会不定期的对垃圾对象进行清理,而何时清理是由JVM内部决定的,即使你调用了gc()方法,也不一定会立即执行。
作者:
孙峰
时间:
2012-6-10 08:44
本帖最后由 孙峰 于 2012-6-10 08:54 编辑
public void finalize(){
System.out.println("after System.gc() is called");
这个方法是Object 类中的一个方法。 运行时会提示 无法覆盖java.lang.Object中的finalize()方法。
讲此方法名换一个,xx()
然后在 main函数中调用 d.xx(),就执行了
作者:
吴超
时间:
2012-6-10 11:14
本帖最后由 吴超 于 2012-6-10 11:18 编辑
<DIV class=t_fsz>使用finalize方法并不会忙上调用垃圾回收机制,会在不确定的时间对其回收
如果,你按照下面,将一个对象指向null,那这个对象在堆内存中,就会成为一个垃圾,在调用这个finalize方法,就会强制回收
package com.text;
//观察finalize的调用
public class SystemDemo3 {
public static void main(String[] args) {
Student stu = new Student();
stu = null;
System.gc();
}
}
class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 重写toString方法
public String toString() {
return "姓名" + name + "年纪" + age;
}
// 自定义finalize() 方法
public void finalize() {
System.out.println(this);
}
}</DIV>
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2