앱에서 블루통신을 통해 들어오는 바이트를 디코딩을 해주는 함수가 있었는데, 이는 디코딩된 함수를
Arraycopy해 return으로 넘겨주는 방식이었는데, 즉 디코딩은 물론 따로 디코딩된 return 값을 받는
바이트 array도 따로 필요했다.
여기서 데이터를 처리하는 속도와 별도로 필요가 없어진 바이트 값들이 쌓이고 있는것이 아닐지 생각했고
디코딩 함수에서 return 값을 제하고 void 형으로 바꾸어주고, 로컬로 선언된 바이트배열을 직접 다루도록 했다.
결과는 성공적이다. 불필요하게 배치되고 메모리 및 GC시에 성능 저하를 일으키던 바이트들을 메모리에서
치워내는 데 성공했다.
< 수정 이전 메모리 HEAP DUMP >
수정 이전에는 실제로 참조하는 바이트 배열은 4군데 정도밖에 되지 않는데, 필요 이상의 데이터가 GC로 수집되기 이전
한참 쌓인것을 확인할 수 있다.
< 수정 이후 메모리 HEAP DUMP >
수정 이후에는 필요로 하고있는 변수 네곳에서 참조하는 값 이외에는 바이트 배열이 쌓이지 않은 것을 확인할 수 있다.
'ANDROID' 카테고리의 다른 글
[안드로이드] 구글맵에서 GeoCoder와 Animation Listener를 활용해 검색 위치 표시하기 (0) | 2018.04.10 |
---|---|
[안드로이드] onClickListener와 onTouchListener에 의한 Memory Leak 잡기 (0) | 2018.04.05 |
[안드로이드] handler의 static final화를 통한 메모리 Leak 해결 (0) | 2018.03.27 |
[안드로이드] 아이콘 스왑 애니메이션을 만들고 싶을 때, 두 개의 핸들러를 둘 것. (0) | 2018.03.23 |
[안드로이드] 특정 이미지뷰의 위치로 아이콘을 움직이자 (0) | 2018.03.07 |