가끔 글들을 보면 아이폰이나 안드로이드에서 메모리 정리가 필요 없다고 하시는 분들이 꽤 많이 계십니다.

 

사실 저도 초기에는 안드로이드에서 다 관리해 주는데 왜 필요한거지..? 라고 알고 있었습니다.

 

구글에서도 그렇게 이야기 했고, 메모리 정리 프로그램은 착시 현상이다.. 라고 말씀하시는 분들이 많으셨으니까요.

 

그러나 실제 몇년동안 안드로이드 프로그래밍을 하면서 느낀점은...(물론 아이폰도 마찬가지 입니다) 메모리 정리(프로세스 킬)은 꼭 필요하구나.. 입니다.

 

과연 안드로이드가 저절로 알아서 메모리를 전부 정리해 줄까요..?

 

정답은.. 아니오 입니다.

 

물론 설치하신 앱들이 100% 완벽하게 만들어 졌다면 구글에서 말한데로 OS차원에서 메모리를 관리하여 줍니다.

 

하지만!!!! 인터넷상에서 돌아다니는 프로그래밍 기술등을 토대로 보면 대부분의 앱들이 메모리 릭을 무시한채 개발되고 있더군요.

 

이 뜻은 OS가 아무리 천재라도 이 릭만큼은 해결 할 수 없다는 뜻입니다.

 

안드로이드 프로그래밍에서 필요 없는 메모리는 스스로 정리해서 날려버리는 기능이 있기 때문에 대부분의 프로그래머 들은 메모리 관리 없이 무대뽀 코딩을 하고 있습니다. 하지만 실제로 일어나는 일은 그렇지 않습니다. 또한 불가능하구요.

 

조금 기술적으로 들어가보면 엑티비티의 생명주기(Life Cycle)을 보면 어느정도 이해하실 수 있는 부분이 있으실것 같습니다.

깊게 들어가면 좀 복잡하지만 대부분의 앱들이 this 인자를 사용하여 Context를 다른 클래스나 엑티비티에서 사용하게 됩니다. 만약 이때 그냥 "홈"버튼을 눌러서 빠져나오게 된다면 어떻게 될까요?

 

안드로이드에서는 Intent 라는 클래스를 생성한 후 새로운 창을 호출하는데, 이 Intent를 부를때 이 Intent를 생성하는 메인 엑티비티에서 Context로 this인자를 넘겨주면 이 메인엑티비티가 사라질때까지는 새로 생성된 엑티비티(Intent)가 정리가 안되게 됩니다. 당연히 OS에서는 아직 사용하고 있다고 생각하고 가비지 컬랙션을 못하고 있겠죠. 이것은 고스란히 메모리에 상주하고 남게 됩니다.

 

새로 생성된 엑티비티에서 홈 버튼을 눌렀을 때 onPause 에서 메모리 해제를 해주고, onResume에서 다시 객체를 생성해서 사용하게 한다면 메모리 릭이 발생하지 않겠죠.

 

하지만 실상(99%)의 앱들이 그렇게 하지 않고 있습니다. 안드로이드의 가비지 컬렉션을 과신하고 있는것이죠...

 

실제로 저도 과신하다가 큰 낭패를 많이 만났었습니다. 특히 만화책 뷰어를 개발할때 점점 메모리를 먹게되면서 나중에는 한 앱당 사용할 수 있는 메모리량을 초과하여 오류를 뿜어내고 멈추게되는 현상까지 나타나게 되었지요...

 

그러나 스피드업 같은 최적화 프로그램을 이용해서 Task Kill을 해주면(안드로이드 2.2 버전 이후부터는 Restart입니다.) 메인 엑티비티를 종료 또는 재시작 하라는 명령을 통해 그 안에서 다시 생성되었던 Intent가 정리되게 됩니다. 즉 메인 액티비티에서 새로운 창을 생성하지 않은 상태가 되는것이지요.

 

조금 더 자세히 설명을 하면 ..... (에구 하나 설명하려다 보니 부연설명할게 너무너무 많아지네요.ㅜㅜ)

 

안드로이드에서는 프로그램을 설치하는 순간 그 앱의 메인 엑티비티는 살아있는 상태가 됩니다. 그리고 바로 중지 상태가 되어있는 것이죠. 그리고 실행을 하면 그 중지상태의 엑티비티가 활성화 되는것입니다. 그래서 2.2(프로요)부터는 Restart를 하면 메인엑티비티만 뜨고, 그 안에서 생성된 다른 엑티비티(Intent)는 해제가 되는 상태가 되기 때문에 메모리 정리가 될수 있다고 하는 것이지요..

 

좀 길게 설명을 했지만, Restart를 하면서 다시 실행이 되는 과정에서 약간의 버벅임은 말씀하시는데로 있습니다. 하지만 그 이후에는 확보된 메모리에 의해서 더욱 쾌적하게 돌아가게 됩니다.

 

어떤분은 메모리와 속도는 전혀 상관이 없다고 하시지만, 실제로 사용해보시면 그렇지 않다는 것을 아실 수 있습니다. 바로 메모리가 부족하면 버벅거리거나 아예 실행이 안되는 앱들이 있는것이 증거 입니다. 이때 메모리를 정리한 후 해보시면 잘 됩니다.

 

사실 여러말 할 필요 없이..... 사용해보고 효과가 있는지 없는지를 확인해보면 됩니다.

 

메모리 량이 확보되었을 때의 속도와 그렇지 않을 때의 속도는 현재 AP의 속도가 빠르고 코어의 수가 많음에도 불구하고 상당한 차이가 납니다. 사양이 안좋은 폰에서는 더더욱 차이가 두드러지게 납니다.

 

벤치마킹에서 나오는 숫자는 의미가 없습니다... 그냥 AP의 속도 등등을 마킹하는것이므로 당연히 변함이 있을리가 없지요..

 

갤럭시 S가 메모리가 부족하여 버벅거리고, 홈화면에서 스크롤 조차 버벅거려서 짜증날때 메모리 정리를 해주면 아주 새폰처럼 빠릿해 집니다. 물론... 앱을 너무 많이 설치 한 상태라면 정리 할 수 있는 한계가 있겠지만, 대부분의 경우 많은 효과가 있습니다.

 

구글이던 애플이던 완벽한 OS는 없습니다. 어쩔수 없는것이지요... 더더군다나 수많은 앱들이 모두 100% 메모리 관리를 하면서 만들어 진다는 보장은 없다고 봅니다.

 

즉, 결론은 메모리 정리 프로그램은 많은 앱들이 메모리 관리가 제대로 되게 만들어진다면 필요가 없겠지만, 그렇지 않은이상 꼭 필요한 프로그램이 될것이라고 봅니다.

 

참고로... 메모리 정리를 하나 안하나 못느낀다는 뜻은 아직 사용할 수 있는 메모리의 량이 충분해서..라고 생각하시면 됩니다.

 

어느 순간 버벅임을 느끼셨을 때 한번 메모리 최적화 프로그램을 사용해 보세요. 그러면 아.. 다르긴 다르구나.. 라는것을 직접 체감하실 수 있습니다.

 

별거 아닌글을 상당히 길게.... 거창하게 썼네요.....

 

긴글 읽어주시느라 수고 많으셨습니다.

 

감사합니다.

 

저작자 표시
신고

'IT관련 이야기' 카테고리의 다른 글

메모리 최적화는 과연 필요한것인가?  (0) 2012.10.14
Posted by 진짜 미드미

댓글을 달아 주세요

티스토리 툴바