안드로이드 개발 질문/답변
(글 수 45,052)
로그캣을 보다보면 저 메시지가 많이 발생하는데 GC가 가비지 콜렉션이라고 알고 있습니다.
GC 알고리즘에 다음과 같은 4가지가 있는 것으로 알고 있는데....
- Default Collector
- Parallel GC for young generation (from JDK 1.4 )
- Concurrent GC for old generation (from JDK 1.4)
- Incremental GC (Train GC)
아무 것도 손 안댔으니 Default Collector 를 사용하는 거겠죠?
이게 GC를 수행할때 어플의 구동이 멈추고 GC를 완료 해야 다음 단계로 넘어가기에
어플 로딩시간의 대부분을 차지하는 것이 바로 제목의 이...메시진데요
GC freed ##### objects / ####### bytes in ###ms
마이너 GC의 경우 0.5초면 끝내는 반면
(헌데 0.5초라 해도 이미지를 많이 불러오는 엑티비티의 경우 20~30개의 이미지를 불러오면 이것도 꽤 부담이 되는 시간입니다...)
Full GC의 경우 끝내는데 수초가 걸리는데....가끔 풀GC가 걸리면 몇초 동안 시스템이 멈춰있다가 요청한 결과가 한 번에 밀려오면서
어플이 죽어버리는 경우가 종종 있습니다...
FullGC 같은 치명적 문제 해결과 어플의 전반적인 속도개선(마이너 GC 속도향상)을 위해 어떻게 하면 좋을까요...?
2010.10.07 11:46:11
GC를 직접 컨트롤 하는것은 오히려 독이 되어 돌아 올수도 있기 때문에 프로그램 흐름을 깔끔하게 가져가는 것이
좋은 방법인것 같습니다.
http://blog.javia.org/android-allocation-free-code-avoids-the-gc-freeze/
재사용 가능한 객체를 생성하셔서 빈번한 객체 생성을 피하시고(제일 중요 ^^),
이미지 사용후 자원 반납에 신경쓰셔서 메모리 릭을 피하시고,
멀티쓰레드 사용시 공유자원 관리에 신경을 쓰신다면,
대부분의 GC로 인한 문제는 해결된다고 알고 있습니다.
도움이 되셨으면 좋겠습니다. ^^