일단 내가 찾아본 자료들로는 명시적으로 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

 

Android Memory Leak Part 1: Inner class

Vietnamese Link: https://medium.com/@huynhquangthao/2a487116496f

blog.androidcafe.in

 

+ Recent posts