본문 바로가기

study/effective java

[item7] 다 쓴 객체 참조를 해제하라

java에도 메모리 문제가 나온다.

GC는 만능이 아니다. 대부분의 메모리의 자원의 회수를 GC가 해준다고 해도 가져올 수 없는 상황들이 발생된다.

메모리 문제가 발생할 수 있는 경우

  1. cache의 사용: 객체를 캐싱한 후에 사용을 잊어버려 어떤 데이터인지 모르게 만든다.
  2. 메모리를 직접 관리하는 클래스
  3. 리스너와 콜백의 명확하지 않는 해지

예방법

  1. 내장 객체를 이요할 시 Weak 유형의 객체를 사용해라.
  2. 다 쓴 객체는 null참조를 통해 참조를 해제하여 GC가 메모리 할당을 해제하도록 유도한다.
  3. Weak Reference로 콜백을 등록

결론

it에는 '은총알은 없다' 라는 관용구를 자주 쓰인다. GC라는 것이 겉으로 보기에는 메모리 문제를 완전히 해결해주는 은총알 처럼 보이지만 아니다. GC도 모든 메모리 문제를 해결해주진 않는다. 그렇기에 모든 메모리 문제를 GC에게 맡기는 것 보단 어느정도 지식을 알고 사용하는 것을 생각해봐야 한다.

Reference