单实例回不会被 垃圾回收..

Mybeautiful 2006-12-04 11:16:30
有一个类作为单实例引用...

但这个单实例仅仅被另外一个类的 某一个方法引用。。


请问: 这个单实例是否会 被垃圾回收?

并请给出解释。
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fool_leave 2006-12-04
  • 打赏
  • 举报
回复
会不会回收主要看这个实例是不是还有引用
A.instance.setMsg("")
A是什么?一个实例?还是静态的?
如果A是一个class,instance是一个静态变量,那么instance实际上是有引用的(定义的地方就是)
如果A是一个实例,那我觉得你的方法在编译的时候就该报错了

要不然把代码贴出来
Mybeautiful 2006-12-04
  • 打赏
  • 举报
回复
A是单实例

B有个方法中调用了A
A.instance.setMsg("");


没有其他地方再引用A.
fool_leave 2006-12-04
  • 打赏
  • 举报
回复
不明白
但这个单实例仅仅被另外一个类的 某一个方法引用。。?
具体点
Mybeautiful 2006-12-04
  • 打赏
  • 举报
回复
谢谢fool_leave() ,看有没有更多意见,要是大伙都没有意义就结贴了。
fool_leave 2006-12-04
  • 打赏
  • 举报
回复
static实例是存放在单独的空间里的
self=new SiglonTest();相当于给self定义了一个新的实例。这个实例是存放在静态空间的,其引用就是self,所以不会回收,除非self=null一下
Mybeautiful 2006-12-04
  • 打赏
  • 举报
回复
谢谢 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没有处理

}
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧