Skip to content

Latest commit

 

History

History
20 lines (19 loc) · 1.71 KB

item7.md

File metadata and controls

20 lines (19 loc) · 1.71 KB

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

​ 가비지 컬렉션 언어에서는 (의도치 않게 객체를 살려두는) 메모리 누수를 찾기가 아주 까다롭다.
객체 참조 하나를 살려두면 가비지 컬렉터는 그 객체뿐 아니라 그 객체가 참조하는 모든 객체(그리고 또 그 객체들이 참조하는 모든 객체...)를 회수해가지 못한다. ​

해당 참조를 다 썼을 때 null 처리(참조 해제)

  • 프로그래머는 객체가 배열의 비활성 영역이 되는 순간 null 처리해서 해당 객체를 더는 쓰지 않을 것임을 가비지 컬렉터에 알려야 한다.
  • 객체 참조를 null 처리하는 일은 예외적인 경우여야 한다.
  • 다 쓴 참조를 해제하는 가장 좋은 방법은 그 참조를 담은 변수를 유효 범위(scope) 밖으로 밀어내는 것이다.
  • 우리가 변수의 범위를 최소가 되게 정의했다면(아이템57) 이 일은 자연스럽게 이뤄진다.
  • 자기 메모리를 직접 관리하는 클래스라면 프로그래머는 항시 메모리 누수에 주의해야 한다.
    • 원소를 다 사용한 즉시 그 원소가 참조한 객체들을 다 null 처리해줘야 한다. ​

캐시

  • 객체 참조를 캐시에 넣고 나서 다 쓴 뒤에도 잊어버리는 경우가 있다.
  • 해법은 여러가지이다. (예: WeakHashMap을 사용) ​

리스너 혹은 콜백

  • 클라리언트가 콜백을 등록만 하고 명확히 해지하지 않는다면, 뭔가 조치해주지 않는 한 콜백은 계속 쌓여갈 것이다. 이럴 때 콜백을 약한 참조로 저장하면 가비지 컬렉터가 즉시 수거해간다. (예: WeakHashMap에 키로 저장하면 된다)