Подтвердить что ты не робот

Android: в чем разница между мелкой и сохраненной кучей

Я пытаюсь выяснить утечку памяти приложением MAT, здесь В list_object я нашел некоторое числовое значение    int Shallow heap и retained heap. Какова эта ценность и как узнать, где утечка памяти.

4b9b3361

Ответ 1

Из Блог Никиты Сальникова-Тарновского:

Неглубокая куча проста - она ​​состоит только из кучи, занимаемой сам объект. Есть несколько нюансов о том, как их вычислить, но для объема этой статьи мы оставляем это как есть. Следите за новостями сообщений в той же теме.

Сохраненная куча во многих отношениях более интересна. Только редко вас интересует мелкая куча, в большинстве случаев ваш фактический вопрос можно перевести на "Если я удалю этот объект из памяти, как теперь память теперь может быть освобождена сборщиком мусора".

Теперь, как мы все помним, все алгоритмы сбора мусора Java (GC) следуйте этой логике:

1) Есть некоторые объекты, которые GC считают "важными". Они называются корнями GC и (почти) никогда не отбрасываются. Они есть, например, в настоящее время выполняются методы локальных переменных и ввода параметры, потоки приложений, ссылки на собственный код и аналогичные "глобальные" объекты.

2) Предполагается, что любые объекты, на которые ссылаются эти корни GC и, следовательно, не отбрасывается GC. Один объект может ссылаться на другой в разными способами в Java, в наиболее распространенном случае хранится объект A в поле объекта B. В этом случае мы говорим "B ссылки A".

3) Процесс повторяется до тех пор, пока все объекты, которые могут быть транзитивными полученные от корней GC, посещаются и помечены как "используемые".

4) Все остальное не используется и может быть выброшено.

Ответ 2

Из документов анализатора памяти eclipse

Неглубокая и сохраненная куча

Неглубокая куча - это память, потребляемая одним объектом. Объекту требуется 32 или 64 бит (в зависимости от архитектуры ОС) на каждую ссылку, 4 байта на целое число, 8 байтов на длину и т.д. В зависимости от формата дампа кучи размер может быть скорректирован (например, выровнен на 8 и т.д.), чтобы лучше моделировать реальное потребление виртуальной машины.

Сохраненный набор X - это набор объектов, которые будут удалены GC когда X - сбор мусора.

Сохраненная куча X представляет собой сумму неглубоких размеров всех объектов в сохраненный набор X, то есть память, сохраненная в памяти X.

Вообще говоря, неглубокая куча объекта - это его размер в куче и сохраненный размер того же объекта - это объем памяти кучи, который будет освобожден, когда объект будет собран мусором.

Сохраненный набор для ведущего набора объектов, таких как все объекты определенный класс или все объекты всех классов, загружаемых конкретный загрузчик классов или просто куча произвольных объектов, является набор объектов, который выдается, если все объекты этого ведущего набора становятся недоступными. Удерживаемый набор также включает в себя эти объекты поскольку все остальные объекты доступны только через эти объекты. сохраненный размер - это общий размер кучи всех объектов, содержащихся в сохраненный набор. enter image description here

Минимальный сохраненный размер дает хорошую (под) оценку сохраненный размер, который рассчитывается быстрее, чем точное сохраненное размер набора объектов. Это зависит только от количества объектов в проверенный набор, а не количество объектов в дампе кучи.

Ответ 3

В простых словах Мелкая куча объекта - это его размер в куче, а сохраненный размер одного и того же объекта - это количество памяти кучи, которое будет освобождено, когда объект будет собран мусором. Подробнее