package frank;
import java.lang.*;
/**
垃圾回收:
可达状态
可恢复状态
不可达状态
*/
public class App
{
static App a = null;
private int index = 0;
public static void main(String[] args) throws Exception
{
for(int i = 1;i<10;i++)
{
new App(i);
//Runtime.getRuntime().gc();
System.gc();//强制回收,如果不强制回收的话知道系统退出也不会调用finalize()方法。
}
//Thread.sleep(2000); 暂停两秒,系统把对象变成可达状态。如果不暂停的话就算通知系统强制执行垃圾回收但是也不是马上就会回收,所以用一个空引用去调用对象就会系统异常。
//Runtime.getRuntime().runFinalization();//让系统运行对象终结器。所以不用暂停2秒。
System.runFinalization();// 跟上面一样效果
System.out.println(a.index);
}
App(int a)
{
this.index = a;
}
public void finalize()//垃圾回收自动调用该方法,不该手动调用该方法。当该方法执行完毕后如果对象还是不可达状态,那么垃圾回收就会执行清理。该方法不是一定会执行。
{
a = this;//变成可达状态
System.out.println("系统正在回收...");
}
}