일단 내가 찾아본 자료들로는 명시적으로 non static inner class의 memory를 해제할 순 없어보인다
무조건 outer class의 instance를 들고있게된다. (hidden으로 들고있게된다고 한다.)
의문이 들었던 것은 non static inner class는 무조건 memory leak을 유발시키는 것인가에 대한 고민이었는데
그럴것 같진 않다.
GC의 ROOT에서부터 Reach가되는 Object instance가지 탐색을해서 reach하지 않게되면 instacne를 해제하게되는데
아래 그림과 같은 경우는 outer class 및 inner class (non static inner class)의 instance는 사이좋게 GC에 의해 수거가 되게된다.
하지만 inner class에서 thread가 돌아가면서 긴 시간의 일을 하게되면 어떻게 될까?
GC ROOT쪽에서 Outer class instance의 참조를 만약 명시적으로 null 로 준다고 하여도
inner class의 Thread가 돌아가게 되고 이는 main process가 inner class instance를 참조하게되고 또한
outer class instance역시 참조를 당하기에 memory leak을 유발하게 될 것이다.
또한 위의 그림과 같은구조인데 static변수가 inner class의 instance를 들고있게되면 역시 위와 같은
Reference chain이 생기게되어 memory leak이 발생하게 된다.
참고
https://blog.androidcafe.in/android-memory-leak-part-1-context-85cebdc97ab3
'안드로이드 > Memory Leak' 카테고리의 다른 글
4. memory leak 회피방법: 익명클래스를 주의하라 (0) | 2019.08.12 |
---|---|
3. memory leak 회피방법: Inner Class Reference를 주의하라 (0) | 2019.08.11 |
Static inner class를 쓰는이유는 무엇일까? (0) | 2019.08.11 |
2. memory leak 회피방법: Singleton class에게 context reference를 넘기지마라 (0) | 2019.08.11 |
1. memory leak 회피방법: static 변수에 activity와 view를 담지마라 (0) | 2019.08.11 |