자바는 가비지 컬렉터가 있어 C, C++와 같은 언어와 달리, 프로그래머가 직접 메모리를 해제하는 것은 자바에서는 일반적으로 필요하지 않다.
그러나, 가비지 컬렉션에서 객체 참조 하나를 살려두면 다른 객체들의 참조, 그 참조의 참조 ... 이렇게 하나의 객체가 매우 많은 객체를 회수해가지 못하게 될 수 있다.
따라서 메모리 누수가 발생할 수 있다.
다 쓴 객체를 null 처리 한다.
그러나 이는 가비지 컬렉터가 있는 자바에서는 불필요하게 코드만 많아지는 일일 수 있다.
그러므로 null 처리는 특별한 상황에만 해주는 것이 좋다.
클래스에서 자신의 메모리를 직접 관리할 때 EX) Object[] elements 와 같은 필드를 가진 클래스
객체 참조를 캐시에 넣어두고 이를 해제하지 않을 때 -> 시간이 지날수록 엔트리의 가치를 떨어뜨리는 방식을 통해 해소
리스너, 콜백을 등록해두고 명확히 해지하지 않았을 때 -> 해당 리스너, 콜백을 약한 참조로 등록하면 가비지 컬렉터가 수거
핵심 정리
메모리 누수는 겉으로 잘 드러나지 않지만, 시스템에 수 년간 잠복하는 사례도 있다. 이런 누수는 철저한 코드 리뷰, 힙 프로파일러 같은 디버깅 도구를 동원해야지만 발견되기도 한다. 그래서 예방법을 알아두는 것이 중요하다.