什么是对内部类的合成反向引用

时间:2011-10-14 12:46:39

标签: java memory memory-leaks

我正在寻找我的应用程序中的内存泄漏,我正在使用的分析器告诉我寻找这些类型的引用,但我不知道我在寻找什么。有人可以解释一下吗?

谢谢,

埃利奥特

2 个答案:

答案 0 :(得分:7)

您可以对OUTER类进行合成反向引用,但不能对内部类实例进行合成反向引用。

e.g。

class Outer {

    class Inner {
    }

    static class Nested {
    }
}

在此示例中,Inner具有对Outer类的引用。嵌套没有。如果外部很大,这可能意味着你可以抓住你不需要的物体。

简而言之,如果可以,请制作内部课程static

答案 1 :(得分:3)

我认为没有合成引用这样的东西。我认为探查器正在讨论从内部类到其封闭类的引用。当你有这样的代码时会创建这些代码:

class Outer {
  class Inner {
  }
}

在上面的代码中,Inner的每个实例都有一个与之关联的Outer实例。通过Inner隐藏的合成成员字段维护关联,该字段包含对Outer的引用。

如果代码是这样的变化:

class Outer {
  static class Inner {
  }
}

没有这样的合成参考。