2장_아이템7 - ririkat/effective-java GitHub Wiki
자바는 가비지 컬렉터가 메모리를 어느 정도 관리해줘 프로그래머 입장에서 직접 메모리 관리를 하지 않아도 되기 때문에 편리하다. 하지만, 이를 메모리 관리에 더 이상 신경 쓰지 않아도 된다고 오해하면 안된다. 자칫하면 메모리 누수에 노출될 수 있기 때문이다.
- 객체의 참조 해제 미흡
- 캐시
- 리스너 or 콜백
- 객체의 참조 해제 미흡
참조 해제를 위해 무조건 null 처리할 필요는 없다. 가비지 컬렉터가 관리하는 대상의 경우에는 유효 범위 밖으로 밀어내는 것으로 충분하다.
- 자기 메모리를 직접 관리하는 클래스의 경우
- 참조를 다 썻을 때 null 처리 한다.
- 그 외
- 참조를 담은 변수를 유효 범위 밖으로 밀어낸다
- 자기 메모리를 직접 관리하는 클래스의 경우
- 캐시
- WeekHashMap 을 사용해 캐시를 만들어라
캐시 외부에서 키를 참조하는 동안만 엔트리가 살아 있는 캐시가 필요한 상황일 경우에 사용하는 방법
- 시간이 지날수록 엔트리의 가치를 떨어뜨려라
쓰지 않는 엔트리 청소 필요
백그라운드 스레드 활용 캐시에 새 엔트리 추가 시 부수 작업 수행
- WeekHashMap 을 사용해 캐시를 만들어라
- 리스너 or 콜백
- 약한 참조로 저장 -> 가비지 컬렉터가 수거