← 질문 목록
#269깊이 0

안드로이드에서 메모리 누수가 발생하는 주원인은 무엇인가?

모바일심화메모리

활동(Activity)이 파괴되었음에도 외부 객체에 의해 참조가 유지되어 가비지 컬렉터가 회수하지 못할 때 발생한다.

  • GC Root

    여기서 닿는 것은 걷지 않는다

    • 오래 사는 바깥 객체

      핸들러나 비동기 작업이 흔한 자리다

      • 익명 클래스

        바깥 클래스를 숨은 참조로 붙잡는다

      • Activity

        파괴됐는데도 이 사슬에 매달려 남는다

가장 흔한 사례는 Activity 내부에서 익명 클래스나 내부 클래스를 사용하는 경우다. 이들은 외부 클래스에 대한 숨은 참조를 가지므로, 내부 클래스가 살아있으면 Activity도 메모리에 남는다.

특히 핸들러(Handler)나 비동기 작업이 Activity보다 오래 실행될 때 위험하다. 작업이 끝나기 전까지 Activity 참조를 붙잡고 있어 누수가 발생한다.

먼저 화면보다 오래 사는 작업과 콜백을 수명에 맞춰 끊는다. 그래도 남는 자리에만 정적 중첩 클래스나 약한 참조를 쓴다. 또한 Activity 생명주기에 맞춰 등록한 리스너를 명시적으로 해제해야 한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

안드로이드에서 메모리 누수가 발생하는 주원인은 무엇인가?