有一个类作为单实例引用...但这个单实例仅仅被另外一个类的 某一个方法引用。。
请问: 这个单实例是否会 被垃圾回收? 并请给出解释。

解决方案 »

  1.   

    A是单实例B有个方法中调用了A
    A.instance.setMsg("");
    没有其他地方再引用A.
      

  2.   

    会不会回收主要看这个实例是不是还有引用
    A.instance.setMsg("")
    A是什么?一个实例?还是静态的?
    如果A是一个class,instance是一个静态变量,那么instance实际上是有引用的(定义的地方就是)
    如果A是一个实例,那我觉得你的方法在编译的时候就该报错了要不然把代码贴出来
      

  3.   

    谢谢 fool_leave() ,经过测试,它确实是用引用,不会被GC干掉..但本身就是引用,不甚明白。。以下是测试代码:public class SiglonTest { private SiglonTest(){

    }

    private static SiglonTest self;

    public static  SiglonTest instence(){
    if (self==null)
    self=new SiglonTest();
    return self;
    }

    private String msg="initial";

    public String getMsg(){
    return msg;
    } public void setMsg() {
    msg="change";

    }
    }public class GcTestSiglon {
    public void test() {
    SiglonTest.instence().setMsg();
    } public void testget() {
    System.out.println(SiglonTest.instence().getMsg());
    } public static void main(String argv[]) {
    GcTestSiglon gct = new GcTestSiglon();
    gct.test();
    try {
    Thread.sleep(1000000);  \\slpee 1000 秒,等GC处理
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    gct.testget(); //事实证明,GC没有处理 }
    }
      

  4.   

    static实例是存放在单独的空间里的
    self=new SiglonTest();相当于给self定义了一个新的实例。这个实例是存放在静态空间的,其引用就是self,所以不会回收,除非self=null一下
      

  5.   

    谢谢fool_leave() ,看有没有更多意见,要是大伙都没有意义就结贴了。