Android - 가비지 컬렉션의 특징

1. 가비지 컬렉션이 발생하는 시점에 대해서 제어할 수 없다.
System.gc() 를 호출하여 안드로이드에 명령을 할 수는 있지만, 최종적으로는 달빅 가상머신이 언제 실행할지를 결정한다.

2. 가비지 컬렉션이 실행되는 상황
- GC_FOR_MALLOC : 힙이 가득차서 메모리를 할당하지 못하고, 할당이 계속 이루어질 수 있도록 메모리가 리클레임되어야 할 때 발생
- GC_CONCURRENT : 컬렉션이 시작되는, 보통은 리클레임할 충분한 오브젝트들이 있을 때 발생.
- GC_EXPLICT : system.gc()를 호출해서 가비지 컬렉션을 명백하게 요청할 때 발생
- GC_EXTERNAL_ALLOC : External native memory alloc이 발생하여 메모리가 full인 경우.
- GC_HPROF_DUMP_HEAP : HPROF 파일을 생성할 때 발생

3. 참고
안드로이드 2.3 이후 버전에서는 가비지 컬렉션 작업이 분리된 스레드에서 실행되므로 이전처럼 모든 앱이 정지되는 현상이 발생되지는 않는다.
하지만 가비지 컬렉션이 일어나면 메인 스레드는 여전히 영향을 받는다. (5ms)