[Java] 다 쓴 객체를 해제하라
들어가며
메모리 누수를 방지하는 방법을 알아보기 위한 포스팅이며 해당 게시글은 인프런 백기선 강사님의 이펙티브 자바 완벽 공략 1부 강의를 바탕으로 쓰였음을 미리 밝힙니다.
메모리 누수 방지
- 배열 또는 리스트와 같은 컬렉션 클래스의 경우 메모리 누수를 조심해야 한다.
null
처리를 통해 gc의 대상이 되게 함으로써 메모리 누수를 방지할 수 있다.WeakHashMap
과 같은 자료구조를 통해 strong reference가 없는 객체의 메모리를 해제할 수 있다.- 캐시에서는 LRU와 같은 알고리즘을 통해 직접 메모리를 해제할 수도 있다.
- 별도의 스레드를 할당하여 백그라운드에서 메모리 해제 작업을 주기적으로 실행할 수도 있다.
WeakHashMap
- weak reference를 키로 하여 메모리의 누수를 방지하는 자료구조이다.
- weak reference: strong reference가 없을 때 gc의 대상이 된다.
- soft reference: strong reference가 없고 메모리가 부족할 때 gc의 대상이 된다.
- phantom reference: strong reference 없어지면
ReferenceQueue
에 해당PhantomReference
에 들어간다. 이후 커스텀한PhantomReference
에서 자원 반납 등 메모리 해제 후 필요한 작업을 수행하게 된다.
댓글남기기