본문 바로가기
Java/Effective Java

[아이템 7] 다 쓴 객체 참조를 해제하라

by setung 2021. 12. 23.

자바는 GC가 메모리 관리를 해주긴 하지만 개발자가 메모리에 신경을 쓰지 않아도 된다는 것은 아니다.

책에서 나온 사례를 간략하게 설명해보겠다.

 

▶ scope에 따라 GC의 대상이 안될 수 있다.

메서드와 같은 중괄호 { } 안에 만들어진 객체 같은 경우 괄호를 빠져나오게 되면 GC 대상이 되어 수거된다.

하지만 인스턴스 변수나 전역 변수는 GC 대상이 안되기 때문에 사용하지 않는 객체라면 null을 선언해주어 GC 대상이 되도록 만들어야 메모리 낭비가 안된다.

 

 

 캐시

데이터를 빠르게 접근하기 위해 캐시라는 임시 저장 공간을 사용한다.

하지만 객체를 캐시에 넣고 나서 그대로 나누면 메모리를 낭비한다.

  • WeakHashMap 사용 :  key 값이 null 되면 key, value 값을 제거한다.
  • ScheduledThreadPoolExecutor와 같은 백그라운드 스레드 사용 : 주기적으로 캐시 데이터 공간 정리.

 

 리스너 or 콜백

클라이언트가 콜백을 동록만 하고 명확히 해지하지 않는다면 콜백은 계속 쌓여간다.

이럴 때 콜백은 약한 참조(Weak Reference)로 저장하면 GC가 즉시 수거해간다.

WeakHashMap에 Key로 저장하면 된다.

 

댓글