在下面的代码中,一旦退出方法Nail
,对ypaw
的引用就结束了吗?还是存在泄漏的可能?另外,一旦退出类someMethod
,对Dog
的所有引用都消失了,或者Nail中的静态引用是否引起麻烦?请注意,ypaw
和ypaw
是同一对象,并且我想知道由于静态引用,该对象在内存中保留了多长时间。当然,假设垃圾收集器在适当的时间执行。
Class Dog{
private Paw ypaw;
//…..
public void someMethod(){
Nail nail = Nail.getInstance(ypaw);
}
}
Class Nail{
private static Paw mPaw;
public static Nail getInstance(Paw p){
mPaw = p;
return new Nail();
}
//…. other stuff
}
编辑
我的意思是说我有一个Dog实例为
mPaw
,而我的myDog
实例是通过Nail
。 myDog
死后(即gc'ed)mPaw
会发生什么? 最佳答案
不,静态变量的生存时间与加载类的类加载器的生存时间一样长。因此,在许多应用程序中,这是“永远的”。
目前尚不清楚您要实现什么目标,但是这段代码几乎可以肯定是一个坏主意。
(通常,可变的静态数据是个坏主意。可变的静态非私有字段是个好主意-除了其他任何事情,您都不可能控制所有访问以实现同步目的。)