본문 바로가기
Development/Android

[안드로이드] 가비지 컬렉터!!

by 푸민 2015. 11. 1.
반응형


안녕하세요 푸민입니다.

안드로이드(자바)에는 가비지컬렉터라는 애가 있는데요. 

애는 우리가 사용하지 않는 메모리를 해제하고 여유공간을 만드는 일을 합니다. 

이것 때문에 자바는 메모리 관리가 쉬우면서도 어려워요! 

C는 개발자가 직접 메모리를 해제 시켜야 하기에 조금 복잡하지만 설계를 잘해서 제어하기가 쉽고, 자바는 가비지 컬렉터가 알아서 메모리관리를 해주지만 개발자가 직접제어하는게 아니라 달빅가상머신에서 제어를 합니다.


한가지 가상머신을 불러올수 있는 경우는


System.gc()


System 클래스의 gc() 메소드를 호출하면 가비지 컬렉터를 불러달라고 요청하는 것입니다.


이런 가비지 컬렉터가 호출되면 관련된 로그가 찍힙니다. 이런 상황이 5가지가 존재하는데요.

달빅가상머신이 언제 가비지컬렉터를 호출하여 메모리를 정리하는지 한번 볼까요?


1. GC_DOR_MALLOC

- 힙 영역이 가득차서 메모리를 할당하지 못하고, 할당이 계속 이루어질 수 있도록 메모리가 리클레임 되어야 할때 발생.


2. GC_CONCURRENT

- 리클레임할 오브젝트들이 충분히 있을 경우 발생


3. GC_EXPLICIT

- System.gc() 를 호출하여 가비지 컬렉터를 명백하게 요청할 때 발생


4. GC_EXTERNAL_ALLOC

- 허니컴 이후 발생하지 않음


5. GC_HPROF_DUMP_HEAP

- HPROF 파일을 생성할때 발생


System.gc() 를 호출할때 주의사항이 있는데, 가비지 컬렉터의 경우 어플리케이션의 메인스레드에서 동작하기 때문에 사용자 입장에서는 렉이 걸린듯이 멈추기에 주의해야합니다.

반응형

댓글