[Java] 다 쓴 객체를 해제하라

최대 1 분 소요

들어가며

메모리 누수를 방지하는 방법을 알아보기 위한 포스팅이며 해당 게시글은 인프런 백기선 강사님의 이펙티브 자바 완벽 공략 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에서 자원 반납 등 메모리 해제 후 필요한 작업을 수행하게 된다.

댓글남기기