앱의 메모리에 문제가 발생 -> 안드로이드 스튜디오의 메모리 프로파일러로 시간경과에 따라 메모리를 할당하는 그래프를 확인한다.
-> 사용중인 메모리양, 할당된 java객체수 , 가비지 수집이 발생하는 시간
1. 타임 라인에서 바람직하지 않는 메모리할당 패턴이 있는지 확인한다.
2. 자바 힙 덤프하여 특정시점에 어떤 객체가 메모리를 고갈시키는지 확인한다.
3. 정상 사용과 극단적인 사용중 메모리할당을 기록하여 너무 많은 객체를 할당하거나 누출되는 객체를 할당하는 곳이 어딘지 파악한다.
4. Record memory allocations 클릭한다 -> Android Monitor는 기록하는 동안 앱에서 발생하는 모든 할당을 추적한다. 다 마쳤으면 Stop recording 클릭하여 할당을 볼수 있다.
5. 할당 기록을 검사한다.
1) 목록을 살펴보며 비정상적으로 힙 개수가 많고 누수가 발생할 수 있는 객체를 찾는다.
2) Instance View 창에서 인스턴스를 클릭한다. 그러면 아래에 Call Stack 탭이 나타나면서 그 인스턴스가 할당된 위치와 정확히 어떤 스레드에 할당되었는지 표시된다.
3) Call Stack 탭에서 아무 라인이나 클릭하면 편집기에서 해당 코드로 이동할 수 있다.
6. 힙 덤프는 앱에서 어떤 객체가 힙 덤프를 캡처하는 시점에 메모리를 사용하는 중인지 보여준다. 특히 장시간의 사용자 세션 후, 힙 덤프는 메모리에 더 이상 남아 있으면 안 된다고 생각했는데 여전히 메모리에 있는 객체를 보여줌으로써 메모리 누수를 식별하는 데 도움이 될 수 있다.
- 앱이 할당한 객체의 유형과 각 객체의 수
- 각각의 객체가 사용 중인 메모리의 양
- 코드에서 각 객체에 대한 참조가 유지되는 위치
- 객체가 할당된 위치에 대한 호출 스택 (할당을 기록하는 동안 힙 덤프를 캡처할 때, 현재는 Android 7.1 및 이전 버전에서만 힙 덤프와 함께 호출 스택을 사용할 수 있습니다.)