在下面的代码中,一旦退出方法Nail,对ypaw的引用就结束了吗?还是存在泄漏的可能?另外,一旦退出类someMethod,对Dog的所有引用都消失了,或者Nail中的静态引用是否引起麻烦?请注意,ypawypaw是同一对象,并且我想知道由于静态引用,该对象在内存中保留了多长时间。当然,假设垃圾收集器在适当的时间执行。

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实例是通过NailmyDog死后(即gc'ed)mPaw会发生什么?

最佳答案

不,静态变量的生存时间与加载类的类加载器的生存时间一样长。因此,在许多应用程序中,这是“永远的”。

目前尚不清楚您要实现什么目标,但是这段代码几乎可以肯定是一个坏主意。

(通常,可变的静态数据是个坏主意。可变的静态非私有字段是个好主意-除了其他任何事情,您都不可能控制所有访问以实现同步目的。)

10-04 10:11