本帖最后由 java2000_net 于 2008-08-04 20:59:55 编辑

解决方案 »

  1.   

    1个
    首先c1.go(c2)这里,c2这个参数是一个副本,所以它被赋为null不会引起垃圾回收
    而return了个null赋给c3,c3本来就没有被赋值,所以也没有引起垃圾回收
    然后c1=null;本来c1被赋给了一个对象,但是这个时候c1不指向这个对象了,这样就有可能引起垃圾回收了
      

  2.   

    同意楼上,只有一个.
    CarBoard c1=new CarBoard();
    CarBoard c2=new CarBoard(); 
    c1和c2分别持有两个对象的引用.
    CarBoard c3=c1.go(c2); 
    CarBoard go(CarBoard cb){
    cb=null;
    return cb;

    注意方法调用的时候,形式参数cb和实际参数c2是两个东西,不过它们的内容相同,指向同一个对象.
    在方法中让cb为null,c2不受影响,仍然指向原来的对象.返回null之后,c3为null
    c1=null; 
    这时候c1原来引用的对象因为不存在对它的引用了,所以是可回收的.而且只有这一个可回收.
      

  3.   

    我认为就这个程序而言当运行到end的时候所有对象都符合垃圾回收机制。因为这段程序到这里就要结束了所有的对象都是不会再被使用的对象了。
      

  4.   

    谢谢!明白了,那么c1=null;以后c1里的Short s=5;这个对象符合吗?
      

  5.   

    谢谢!明白了,那么c1=null;以后c1里的Short s=5;这个对象符合吗?
      

  6.   

    这个不符合,因为这是CardBoard中的数据成员,只要这个类的对象存在,它就存在.
    这样说就有些乱了.在c1原来指向的CardBoard对象中有一个Short s=5这个对象,c1原来指向的对象回收的时候它肯定一起回收了.比较绕.
      

  7.   

    使用jdk自带的jconsole或Optimizeit,会看到GC的过程~~~