안녕하세요.


이미지를 로드하는 작업이 빈번하게 발생하는 앱이라 이미지 로드 전에 현재의 Heap 메모리 상태를

로그를 찍으면서 테스트를 해보고 있는데요. 사용하는 이미지들이 많은 관계로 recycle 로직을 적용하여

최대한 메모리 부하를 낮추려 노력중인데요.

이해할수 없는 상황이라 질문 올립니다.


일단 메모리 로그는 아래와 같이 찍었구요.

 Log.i("PFUtil", "Heap max size = " + Runtime.getRuntime().maxMemory() / 1024 + "KB");

 Log.i("PFUtil", "Heap free size = " + Runtime.getRuntime().freeMemory() / 1024 + "KB");

 Log.i("PFUtil", "Heap totlal size = " + Runtime.getRuntime().totalMemory() / 1024 + "KB");


아래 이미지의 상황에서는 free size가 8메가 정도 있는것으로 로그에는 나타납니다.

그런데 다음 이미지를 로딩하는 과정에서 out of memory가 발생하죠. 

로그 상에는 로딩하려는 이미지가 4메가 정도 되는데, free size를 고려하면 out of memory는 발생하지 않을것 같은데

발생 하네요. free size가 이보다 더 큰 경우에도 같은 상황이 발생합니다.

DDMS 의 heap size 와 찍는 로그 모두 확인해 봐도 free는 충분할것 같은데 왜 모자르다는 걸까요?