본문 바로가기

ANDROID

[안드로이드] 디코딩 함수를 return 값을 통해 값을 넘기지 않고 변수 자체를 다루도록 해보았다

앱에서 블루통신을 통해 들어오는 바이트를 디코딩을 해주는 함수가 있었는데, 이는 디코딩된 함수를


Arraycopy해 return으로 넘겨주는 방식이었는데, 즉 디코딩은 물론 따로 디코딩된 return 값을 받는


바이트 array도 따로 필요했다. 


여기서 데이터를 처리하는 속도와 별도로 필요가 없어진 바이트 값들이 쌓이고 있는것이 아닐지 생각했고


디코딩 함수에서 return 값을 제하고 void 형으로 바꾸어주고, 로컬로 선언된 바이트배열을 직접 다루도록 했다.


결과는 성공적이다. 불필요하게 배치되고 메모리 및 GC시에 성능 저하를 일으키던 바이트들을 메모리에서


치워내는 데 성공했다.


< 수정 이전 메모리 HEAP DUMP >



수정 이전에는 실제로 참조하는 바이트 배열은 4군데 정도밖에 되지 않는데, 필요 이상의 데이터가 GC로 수집되기 이전 


한참 쌓인것을 확인할 수 있다.



< 수정 이후 메모리 HEAP DUMP >

 



수정 이후에는 필요로 하고있는 변수 네곳에서 참조하는 값 이외에는 바이트 배열이 쌓이지 않은 것을 확인할 수 있다.