1. Запись распределения Java/Kotlin
Просмотрите стек вызовов объектов на уровне Java и количество созданных объектов за короткий период времени. Его можно использовать для быстрого анализа джиттера памяти, а можно использовать для быстрого нахождения стека вызовов объекта (эквивалентно мату).Как видно из рисунка
выше, за короткое время создается 23 массива char[] , а самый большой char[] занимает 20 КБ, см. стек cll. Было обнаружено, что стек вызовов создан методом в CheckAppProcessTask.
2. Захватите дамп кучи
Он используется для получения текущего снимка памяти, просмотра состояния памяти текущего приложения процесса и может использоваться для анализа использования памяти уровня Java и собственного уровня.Из-за 0Leaks
на приведенном выше рисунке нет Утечка памяти активности/фрагмента, поэтому я не буду ее здесь представлять.
Затем проанализируйте, как проверить использование памяти, стек вызовов и другие проблемы с памятью.
Устранение неполадок с использованием больших объектов памяти
Например, из рисунка выше видно, что память слоя Java занимает больше объектов: CoroutineScheduler в сопрограмме, которая занимает 8M памяти.
Затем проверьте, какие объекты вызывают оккупацию:
После проверки выясняется, что CoroutineScheduler в определенной версии сопрограммы создаст объект массива 8M.
Затем проверьте использование памяти объектом Bitmap:
Поскольку тестовое устройство — Android 12, растровое изображение занимает память собственного слоя в моментальном снимке памяти. Откройте список растровых изображений и обнаружите, что максимальный объем памяти, занимаемый растровым изображением, превышает 500 КБ. Дважды щелкните его, отметьте gc и проверьте стек вызовов, чтобы увидеть, какие объекты содержат растровое изображение и не освобождаются.
Наконец, обнаружено, что растровое изображение удерживается представлением, которое удерживается объектом IconManager.
Нужно совмещать бизнес и сцену, чтобы анализировать, нужно ли уничтожать объект и каких объектов слишком много.Точно так же говорить об оптимизации .
3. Запишите собственные выделения (менее используемые, менее знакомые)
Он используется для просмотра создания объектов c++/c в текущий период времени
В представлении Визуализация: Интуитивно просматривайте создание собственных объектов в каждом потоке
Резюме : Оптимизация памяти, по сути, уменьшает утечки памяти (не освобождается в сценариев использования) объектов) и сократить использование больших объектов и уменьшить дрожание памяти, вызванное частым созданием объектов.