자바 프로세스에서 어떤 객체들이 얼만큼의 메모리를 점유하고 있는지 알아내기 위해 우리는 Heap 메모리를 분석합니다. 
안드로이드에서는 달빅 VM의 힙 메모리를 3가지 수준에서 분석할 수 있습니다. 

1. 개략적인 수준 - DDMS의 VM Heap 탭



아주 간략히 힙 메모리 통계 정보를 보여줍니다. Total/Allocated/Free 메모리 크기, 주요 타입별 객체 갯수 및 크기를 알 수 있습니다. 이게 전부입니다. 아쉽지만 특정 객체를 꼭 찝어서 할당된 갯수와 크기를 알 수는 없습니다. 
그렇지만 메모리 누수가 의심될 때 실제로 누수인지 아닌지 간단하게 판단하는 용도로 활용할 수 있어보입니다. 의심되는 구간에 대해서 [Cause GC] 버튼을 눌러도 객체들이 GC되지 않고 계속해서 쌓인다면 메모리 누수를 의심할 수 있습니다. (안드로이드에서도 GC log 분석이 된다면 gc 로그를 분석하여 메모리 누수 여부를 판별할 수 있겠지만 제가 아직까지 이 방법을 찾지못했습니다)


2. 약간 상세한 수준 - DDMS의 Allocation Tracker 탭



Allocation Tracker는 트래킹을 시작한 이후로 새롭게 할당된 객체들 정보를 비교적 상세히 볼 수 있습니다. Allocation Tracke 사용에 대한 자세한 내용은 Tracking Memory Allocations 기사를 참고하시면 됩니다.(한글 번역 : http://blog.naver.com/huewu/110082424176)


3. 아주 상세한 수준 - Eclipse Memory Analyzer



전문가 수준으로 힙 메모리를 파악하기 위해서는 힙 덤프를 생성해서 분석해야 합니다. 현존 최고의 무료 자바 힙메모리 분석 도구는 아마 Eclipse Memory Analyzer(MAT)일 겁니다. MAT는 힙 분석을 위한 너무나 방대하고 다양한 기능을 제공하기 때문에 제가 감히(?) 여기서는 사용법을 설명드리지 않겠습니다. -.-;; 자세한 사용법은 MAT 공식 사이트나 Eclipse Memory Analyzer, 10 useful tips/articles 를 참고하시기 바랍니다(실토하자면 MAT는 저도 제대로 사용해보질 못했습니다. 머리 싸매고 힙 분석할 일이 아직 없네요. 문제 생기면 그때 공부하렵니다 ㅎㅎ).

ps. 어째 글이 점점 성의가 없어지는 거 같네요. 하핫.
Posted by 에코지오
,