Android Profiler 그리고 BITMAP 핸들링
안드로이드에서 종종 만나는 문제가 NullPointer Exception이며 또 하나는 OOM (Out Of Memory) 입니다. Crash Report 서비스인 UrQA ( http://www.urqa.io) 를 운영하면서 많은 문제들을 볼수 있습니다. 하지만 위 두 문제는 모든 앱이 다 겪고 있는 문제죠. (현재 URQA는 300개가 넘는 업체가 사용하고 있으며, 안드로이드 뿐만 아니라 곧 iOS, Unity, JS를 지원하게 됩니다. 내부 테스트 중입니다)
이러한 문제를 어떻게 해결할까? 에 대해 해당 디바이스를 직접 구하지 않는 한 답은 없지만, 개발자 선에서 해결할수 있는 방법이 Profiler가 아닐까 생각이 듭니다. 하지만 안드로이드 Profiler는 처음 접하기에 러닝 커브가 좀 있고, 이것들을 어떻게 활용하는지 많은 분들이 잘 모릅니다.
또한 안드로이드 OOM (Out of Memory)의 주 원인인 BITMAP. 이것을 어떻게 다루는 것이 좋은지 안드로이드 개발자 사이트에 있으나, 그 밑단에 많은 개념들을 숙지하고 있어야 합니다.
- JVM과 다른 Dalvik 의 메모리 관리 기법
- 다양한 Reference를 사용하여, Garbage Collection 시 불 필요한 리소스를 빠르게 수거하는 방법
- 그리고 Heap Dump를 이해하기 위해 MAT라는 툴을 사용해야 하는데 보는 방법
이 외에도 많은 숨겨진 지식들이 있어야 Profiler를 제대로 활용할수 잇고, 그 문제에 대한 해결책을 찾아갈수 있습니다.
곧 ART가 나오고 ROSalloc 이 나오면서, 메모리 체계, Garbage Collection 의 여러 개선 방향이 나오지만, 우리는 항상 Legacy와 싸워야 합니다. 이 자료가 많은 안드로이드 개발자에게 도움이 되길 바라며, 공유를 합니다.
이 자료는 만드는 데 2개월 가량 저랑 토론하고 몇번을 변경하고 고생한 NHN NEXT의 이영남 학생에게 깊은 감사를 표합니다.