AndroidStudio 메모리 프로파일러(메모리 분석기)

1. Java/Kotlin 할당 기록

Java 계층에서 개체의 호출 스택과 짧은 시간 동안 개체가 생성된 횟수를 확인합니다. 메모리 지터의 빠른 분석에 사용할 수 있으며 객체의 호출 스택을 빠르게 찾는 데 사용할 수 있습니다.(매트와 동일) 위 그림에서 볼 수 있듯이 23개의 char[] 배열이 짧은 시간에 생성됩니다
여기에 이미지 설명 삽입
. , 가장 큰 char[]는 20k를 차지합니다. cll 스택 참조 호출 스택은 CheckAppProcessTask의 메서드에 의해 생성된 것으로 확인되었습니다.

2.캡처 힙 덤프

현재 메모리 스냅샷을 얻고, 현재 프로세스 앱의 메모리 상태를 보고, 자바 레이어와 네이티브 레이어의 메모리 사용량을 분석하는 데 사용할 수 있습니다.위 그림의 0Leaks 때문에 활동이 없습니다
여기에 이미지 설명 삽입
. /fragment 메모리 누수이므로 여기서는 소개하지 않겠습니다.

다음으로 메모리 사용량, 호출 스택 및 기타 메모리 문제를 확인하는 방법을 분석합니다.

대용량 메모리 개체 사용 문제 해결

예를 들어, 위의 그림에서 Java 계층의 메모리가 더 많은 개체를 차지한다는 것을 알 수 있습니다. 코루틴의 CoroutineScheduler는 8M의 메모리를 차지합니다.

그런 다음 점유를 유발하는 객체를 확인합니다.
여기에 이미지 설명 삽입
확인 후 특정 버전의 코루틴에 있는 CoroutineScheduler가 8M 배열 객체를 생성하는 것으로 나타났습니다.

다음으로 Bitmap 객체의 메모리 사용량을 확인합니다.

테스트 기기가 Android 12이기 때문에 비트맵은 메모리 스냅샷에서 네이티브 레이어의 메모리를 차지합니다. 비트맵 목록을 열어 비트맵이 차지하는 최대 메모리가 500K 이상인지 확인하고 더블 클릭하여 gc를 확인하고 호출 스택을 확인하여 어떤 개체가 비트맵을 보유하고 있고 해제되지 않았는지 확인합니다.

여기에 이미지 설명 삽입
마지막으로 비트맵이 IconManager 객체에 의해 유지되는 보기에 의해 유지된다는 것을 발견했습니다.

객체를 파괴해야 하는지, 어떤 객체가 너무 많은지 분석하려면 비즈니스와 장면을 결합해야 합니다.최적화를 같은 방식으로 말하는 것은 금기입니다 .

3. 기본 할당 기록(덜 사용, 덜 익숙함)

현재 기간의 c++/c 개체 생성을 확인하는 데 사용됨
여기에 이미지 설명 삽입
시각화 보기에서: 각 스레드 아래에서 기본 개체의 생성을 직관적으로 확인
여기에 이미지 설명 삽입
요약 : 메모리 최적화는 본질적으로 메모리 누수를 줄입니다. 사용 시나리오) 개체) 및 큰 개체 점유를 줄이고 빈번한 개체 생성으로 인한 메모리 지터를 줄입니다.

추천

출처blog.csdn.net/hexingen/article/details/131940521