정보공간_1

[3기 강북 김승현] Android Heap Memory 관리 본문

IT 놀이터/Elite Member Tech & Talk

[3기 강북 김승현] Android Heap Memory 관리

알 수 없는 사용자 2013. 2. 6. 01:09

1. Heap 메모리 관리는 왜하는가?

기본적으로 Android App은 통상적인 Windows App 이나 Linux App 들과는 다르게, 한개의 Android App 이 Device의 모든 RAM을 사용 할 수 없게 되어있다. 

할당량은 디바이스마다 각각 다른데, 이정보는 /system/build.prop 에 기록되어있다.

build.prop 파일을 열어보면, dalvik.vm.heapsize=??m 으로 쓰여진게 해당 device의 App 이 최대로사용 할 수 있는 Heap 공간이라고 생각하면된다. 보통 작게는 16~많게는 64 정도 까지 밖에 되지 않는다. Stack은 기본적으로 8KB밖에 할당 되지 않고, Thread Group 설정을 통해서 늘릴 수 있다.


2. Context Leak

Android App은 Context 단위로 메모리를 관리하게 되어있는데, Context 의 종류는 Activity, Service, Application 이 있다.

Context를 사용 할 때 주의 할 점이 있는데, Android API상에서 Context를 요구하는 함수가 많다고해서, Context를 static으로 사용 하면 안된다는 점이다. static으로 사용하게 되면 Context에 해당하는 Activity같은 것이 onDestroy되어도 gc가 static 멤버 때문에 되지 않을 수 있어 위험하다. (액티비티와 관련된 모든것이 gc가 되지 못한다. layout background등...)


3. Bitmap

Android 에서 Bitmap은 조금 특별한 객체인데, 보통의 Object는 java단에서 메모리할당이 끝나지만, Bitmap은 framework 소스를 보면 실제 메모리 할당은 c++에서 일어나는 것을 알 수 있다. 

그래서 recycle 메소드를 꼭 호출 해주어야 메모리 해제가 되는데(특히 2.3이하 구버전) Bitmap 사용시는 꼭 recycle 메소드를 호출하여 메모리 손실을 막도록 하자


4. android:largeHeap="true"

Android 3.1 버전에 새로 등장한 기능인데, Heap메모리 용량을 조금더 늘려서 할당해주는 기능이다.

매니페스트의 Application 태그에 기록하면 된다.