GC는 참 유용하다.
메모리 신경 쓸 필요없이 원하는대로 코딩한 후 메모리가 부족하면 자기가 알아서 실행되어 메모리를 확보해준다.
하지만 GC가 메모리 부족하다고 몽땅 회수할 순 없는 노릇이다.
그래서 이 GC는 참조(Reference)를 회수의 관점으로 본다.
회수를 할려고 하는데 참조가 가능한가 아닌가를 두고 결정한다는 것이다.
이러한 참조의 정도를 크게 3단계로 나뉘는데, 아래와 같다.(PhantomReferece은 생략하겠다.)
WeakReference > SoftReference > StrongReferece
StrongReference
- new Object(); 형태로 생성된 객체를 말하며, 해당 객체는 무조건 GC의 회수에서 제외된다.
메모리 누수가 일어나기 때문에 반드시 주의해서 보아야한다.
SoftReference
- new SoftReference(new Object()); 형태로 생성된 객체를 말하며, 해당 객체는 메모리에 여유가 있다면 회수되지 않고
메모리가 부족한 상황이 발생했을 경우 회수된다.
WeakReference
- new WeakReference(new Object()); 형태로 생성된 객체를 말하며, 해당 객체는 GC가 실행되기 전까진 유지되다,
GC가 실행되면 무조건 회수된다. 그러니까 언제든지 회수될 수 있는 객체란 의미이다.
WeakReference의 용도
다른 클래스에서 Activity를 포함한 객체를 참조하거나, 별도의 스레드에서 View, Activity등을 이용하고 있는 경우
해당 참조를 주어서 메모리 누수를 방지한다.
private WeakReference<Activity> reference;
Activity activity = reference.get();
'Before 2022 > Android' 카테고리의 다른 글
Activity에서 Fragment로 데이터 전송 (0) | 2019.01.28 |
---|---|
ViewPager에서 Fragment의 함수 호출 방법 (0) | 2019.01.24 |
퍼미션 체크(권한 허용 요청) 커스텀 리스트뷰로 만들기 (0) | 2019.01.22 |
EditText 제어 (0) | 2019.01.16 |
Fragment 다루기 (0) | 2019.01.15 |