【问题标题】:What is a synthetic back reference to an inner class什么是对内部类的合成反向引用
【发布时间】:2011-10-14 12:46:39
【问题描述】:

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

谢谢,

艾略特

【问题讨论】:

    标签: java memory memory-leaks


    【解决方案1】:

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

    例如

    class Outer {
    
        class Inner {
        }
    
        static class Nested {
        }
    }
    

    在这个例子中,Inner 引用了 Outer 类。嵌套没有。如果 Outer 很大,这可能意味着您可以握住不需要的对象。

    简而言之,如果可以的话,创建内部类static

    【讨论】:

      【解决方案2】:

      我不认为有合成引用一个内部类。我认为探查器正在谈论 from 内部类对其封闭类的引用。这些是在您有这样的代码时创建的:

      class Outer {
        class Inner {
        }
      }
      

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

      如果代码是这样的变化:

      class Outer {
        static class Inner {
        }
      }
      

      不会有这样的综合参考。

      【讨论】:

        猜你喜欢
        • 2018-06-18
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2012-06-29
        • 2012-03-02
        相关资源
        最近更新 更多