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的值为什么会减少呢???不明白,请指教....

解决方案 »

  1.   

    晕,index又不是static变量,四个不同的Garbage实例里面的index都不一样的啊
      

  2.   

    void setID(int id)
    {
    index=id;
    }

    这句index把每个ID都记录了下来
      

  3.   

    我运行出来的结果是object 1 construct
    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!