Ответ 1
Во-первых, дайте понять, что такое утечка памяти:
Определение
Утечка памяти - это данные (растровые изображения, объекты, массивы и т.д.) в ОЗУ, которые сборщик мусора (GC) не может освободить, хотя программа больше не нужна.
Пример
Пользователь открывает представление, в котором отображается изображение. Мы загружаем растровое изображение в память. Теперь пользователь выходит из представления, и изображение больше не требуется, и ссылка на него отсутствует из кода. В этот момент GC вступает в действие и удаляет его из памяти. НО, если у нас все еще есть ссылка на него, GC не будет знать, что это нормально для удаления, и он остался бы в ОЗУ, снимая ненужное пространство - aka Утечка памяти.
Кошка в коробке
Скажем, у нас есть объект Cat в нашем приложении, и мы удерживаем его в объекте Box. Если мы удерживаем окно (ссылаемся на объект Box), а в поле находится Cat, GC не сможет очистить объект Cat от памяти.
Докер - это класс, который имеет статическую ссылку на наш ящик. Это означает, что, если мы не аннулируем его или не переустановим значение, Docker будет продолжать ссылаться на Box. Предотвращение использования Box (и внутреннего кота) из памяти GC.
Итак, нужен ли нам Кошка? это все еще актуально для приложения?
Это зависит от разработчика, чтобы решить, как долго нам нужен Cat. LeakCanary и другие диагностические инструменты предполагают возможный утечка памяти. Они думают, что объект (Cat) может быть не нужен больше, поэтому они предупреждают, что это утечка.
Резюме
В этом примере они дают общий сценарий утечки памяти. При использовании Статической ссылки мы не позволяем GC очистить объект. Вы должны прочитать следующее:
* GC ROOT static Docker.container
* references Box.hiddenCat
* leaks Cat instance
as:
- Объект Cat может больше не использоваться, но GC не был удален из памяти.
- Причина, по которой объект Cat не был удален, поскольку Box имеет ссылку на него.
- Причина, по которой объект Box не был удален, заключается в том, что Docker имеет статическую ссылку на него.
- Статическая ссылка Docker - это ROOT дерева, который вызывает возможную утечку.