Что такое синтетическая обратная ссылка на внутренний класс - PullRequest
3 голосов
/ 14 октября 2011

Я ищу утечки памяти в моем приложении, и профилировщик, который я использую, говорит мне искать эти типы ссылок, но я не знаю, что я ищу.Может кто-нибудь объяснить это?

Спасибо,

Эллиот

Ответы [ 2 ]

7 голосов
/ 14 октября 2011

Вы можете иметь искусственную обратную ссылку на класс OUTER, но не на экземпляры внутреннего класса.

Например,

class Outer {

    class Inner {
    }

    static class Nested {
    }
}

В этом примере Inner имеет ссылку на класс Outer.Вложенных нет.Если значение Outer велико, это может означать, что вы можете удерживать объект, который вам не нужен.

Короче, сделайте внутренние классы static, если можете.

3 голосов
/ 14 октября 2011

Я не думаю, что существует такая вещь, как синтетические ссылки на внутренний класс.Я думаю, что профилировщик говорит о ссылках из внутренних классов на включающие их классы.Они создаются, когда у вас есть такой код:

class Outer {
  class Inner {
  }
}

В приведенном выше коде каждый экземпляр Inner имеет экземпляр Outer, связанный с ним.Ассоциация поддерживается через скрытое синтетическое поле члена Inner, которое содержит ссылку на Outer.

Если бы код был изменен следующим образом:

class Outer {
  static class Inner {
  }
}

не было бытакая синтетическая ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...