代码如下:class Beta{}
class Alpha{
static Beta b1;
Beta b2;
}public class p11 {
public static void main(String[] args){
Beta b1 = new Beta();
Beta b2 = new Beta();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();

a1.b1 = b1;
a1.b2 = b1;

a2.b2 = b2;

a1 = null;
b1 = null;
b2 = null;
}
}问题是,上述代码运行完之后,有几个对象符合垃圾回收的条件。分别是哪几个对象。

解决方案 »

  1.   

    http://blog.csdn.net/aflylove/archive/2006/08/31/1151206.aspx
      

  2.   

    一个对象只要有引用指向他,他就不可能被虚礼机回收。  另外你这个main执行完了后java进程都不在了。谈什么回收不回收的问题啊。
      

  3.   

    不好意思,说的不太清楚。class Beta{}
    class Alpha{
    static Beta b1;
    Beta b2;
    }public class p11 {
    public static void main(String[] args){
    Beta b1 = new Beta();
    Beta b2 = new Beta();
    Alpha a1 = new Alpha();
    Alpha a2 = new Alpha();

    a1.b1 = b1;
    a1.b2 = b1;

    a2.b2 = b2;

    a1 = null;
    b1 = null;
    b2 = null;

    //test line
    }
    }
    }运行到test line 那一行时有几个对象符合垃圾回收的条件。分别是哪几个对象。
    注意,是符合垃圾回收的条件
      

  4.   

    首先要要清对象和引用的关系:
    Beta b1 = new Beta();       这里建立了一个对象,叫它A,用b1指向.
    Beta b2 = new Beta();       这里建立了一个对象,叫它B,用b2指向.    
    Alpha a1 = new Alpha();     这里建立了一个对象,叫它C,用a1指向. 
    Alpha a2 = new Alpha();     这里建立了一个对象,叫它D,用a2指向. 
    a1.b1 = b1;     对象C中的属性a1.b1指向了对象A  注意a1.b1是静态的.
    a1.b2 = b1;     对象C中的属性a1.b2指向了对象A 
            
    a2.b2 = b2;     对象D中的属性a2.b2指向了对象B
            
    a1 = null;      对象C的引用指向了空,所以C没有引用指向了.
    b1 = null;      b1为空了,但b1原来指向的A还有其它引用指向(就是Alpha类的static属性b1).
    b2 = null;      b2为空了,但b2原来指向的B还有其它引用指向(就是a2)现在只有对象C是没有引用指向的对象,所以只有它符合垃圾回收的条件.
      

  5.   

    Beta b1 = new Beta();      // b1     -> @000001(假想的内存地址,下同)
    Beta b2 = new Beta();      // b2     -> @000002
    Alpha a1 = new Alpha();    // a1     -> @000003
    Alpha a2 = new Alpha();    // a2     -> @000004
            
    a1.b1 = b1;                // a1.b1  -> @000001
    a1.b2 = b1;                // a1.b2  -> @000001
            
    a2.b2 = b2;                // a2.b2  -> @000002
            
    a1 = null;                 // a1.b1  -> null (@000001 这时还不符合,因为b1不为null,b1 -> @000001)
                               // a1.b2  -> null (@000002 这时还不符合,因为b2不为null,b2 -> @000002)
                               // a1     -> null
    b1 = null;                 // b1     -> null
    b2 = null;                 // b2     -> null
            
    //test line 在这时候,@000001 @000002 @000003 地址中所存的对象符合垃圾回收的条件
      

  6.   

    我错了
    Beta b1 = new Beta();      // b1     -> @000001(假想的内存地址,下同)
    Beta b2 = new Beta();      // b2     -> @000002
    Alpha a1 = new Alpha();    // a1     -> @000003
    Alpha a2 = new Alpha();    // a2     -> @000004
            
    a1.b1 = b1;                // a1.b1  -> @000001
    a1.b2 = b1;                // a1.b2  -> @000001
            
    a2.b2 = b2;                // a2.b2  -> @000002
            
    a1 = null;                 // a1.b1  -> null (@000001 这时还不符合,因为b1不为null,b1 -> @000001)
                               // a1.b2  -> null (@000002 这时还不符合,因为b2不为null,b2 -> @000002,a2.b2  -> @000002)
                               // a1     -> null
    b1 = null;                 // b1     -> null
    b2 = null;                 // b2     -> null
            
    //test line 在这时候,@000001 @000003 地址中所存的对象符合垃圾回收的条件
      

  7.   

    我又错了
    Beta b1 = new Beta();      // b1    -> @000001(假想的内存地址,下同) 
    Beta b2 = new Beta();      // b2    -> @000002 
    Alpha a1 = new Alpha();    // a1    -> @000003 
    Alpha a2 = new Alpha();    // a2    -> @000004 
            
    a1.b1 = b1;                // a1.b1  -> @000001 
    a1.b2 = b1;                // a1.b2  -> @000001 
            
    a2.b2 = b2;                // a2.b2  -> @000002 
            
    a1 = null;                // a1.b1  -> null  
                              // a1.b2  -> null (@000001 这时还不符合,因为b1不为null,b1 -> @000001) 
                              // a1    -> null 
    b1 = null;                // b1    -> null 
    b2 = null;                // b2    -> null 
            
    //test line 在这时候,@000001 @000003 地址中所存的对象符合垃圾回收的条件 
      

  8.   

    那就是引用a1指向的对象啊.我说的引用有人叫句柄,英文是reference.
      

  9.   

    你骗谁呢, text line被你注释掉了,根本就运行不到那去。
      

  10.   


    这位哥哥真是可爱
    没错,test line是被注释掉的
    意思是这边会写其他一些的代码
    但是已经无关紧要我们讨论的是程序运行到那个位置垃圾回收的状况而已
    不过,还是谢谢回复