class Garbage
{
int index;
static int count;
Garbage()
{
count++;
System.out.println("object "+count+" construct");
setID(count);
}
void setID(int id)
{
index=id;
}
protected void finalize()
{
System.out.println("object "+index+" is reclaimed");
}
public static void main(String[] args)
{
new Garbage();
new Garbage();
new Garbage();
new Garbage();
System.gc();
}
}
当程序执行的时候结果如下:object 1 construct
object 2 construct
object 3 construct
object 4 construct
object 4 is reclaimed
object 3 is reclaimed
object 2 is reclaimed
object 1 is reclaimed但我认为结果应该是:object 1 construct
object 2 construct
object 3 construct
object 4 construct
object 4 is reclaimed
object 4 is reclaimed
object 4 is reclaimed
object 4 is reclaimedindex的值为什么会减少呢???不明白,请指教....
{
int index;
static int count;
Garbage()
{
count++;
System.out.println("object "+count+" construct");
setID(count);
}
void setID(int id)
{
index=id;
}
protected void finalize()
{
System.out.println("object "+index+" is reclaimed");
}
public static void main(String[] args)
{
new Garbage();
new Garbage();
new Garbage();
new Garbage();
System.gc();
}
}
当程序执行的时候结果如下:object 1 construct
object 2 construct
object 3 construct
object 4 construct
object 4 is reclaimed
object 3 is reclaimed
object 2 is reclaimed
object 1 is reclaimed但我认为结果应该是:object 1 construct
object 2 construct
object 3 construct
object 4 construct
object 4 is reclaimed
object 4 is reclaimed
object 4 is reclaimed
object 4 is reclaimedindex的值为什么会减少呢???不明白,请指教....
{
index=id;
}
这句index把每个ID都记录了下来
object 2 construct
object 3 construct
object 4 construct
object 1 is reclaimed
object 2 is reclaimed
object 3 is reclaimed
object 4 is reclaimed====================回收的时候,应该是先创建的显回收吧,因为对象被创建以后没有被别人引用过。
还有index不是递加 也不是递减。
仅仅是当时创建时候的index罢了。把main函数作如下修改 public static void main(String[] args)
{
new Garbage();
new Garbage();
Garbage s3 = new Garbage();
new Garbage();
s3.setID(5);
System.gc();
}
结果就变成了object 1 construct
object 2 construct
object 3 construct
object 4 construct
object 1 is reclaimed
object 2 is reclaimed
object 4 is reclaimed因为第三个对象被s3引用了,s3在main方法结束的时候消亡,所以他所指向的对象还不能被回收。
所以object 3 is not reclaimed!