C/C++처럼 직접 메모리 관리를 해야하는 언어와 달리, GC가 포함된 언어를 사용하면 프로그래밍이 아주 편해진다.
위의 코드는 기능상 문제는 없으나, 메모리 누수 문제가 있다. 이 메모리 누수는 과연 코드의 어느 부분에서 생길까? 메모리누수는 바로
pop() 메서드에서 발생하는데, elements[--size]를 리턴을 하였으나 , element[size]에 있는 객체는 메모리가 해제되어 있지 않기 떄문에 메모리 누수가 생긴다. 이와 같은 문제를 해결하기 위해서는 쓸일 없는 객체(element[size]) 참조는 무조건 null로 만드는 것이다.
하지만 위와 같은 참조처리는 항상 그럴필요는 없는데, 프로그램만 난잡해지기 때문이다. 객체 참조를 null로 처리하는 것은 규범이라기 보단 예외적인 조치가 되어야 한다. 만기 참조를 제거하는 가장 좋은 방법은 변수를 정의할 때 그 유효범위를 최대한 좁게 만들면 자연스럽게 해결된다.
캐시나 리스너를 구현할 때도 메모리 누수가 자주 발생하는데, WeakHashMap을 가지고 캐시를 구현하면 해결할 수 있다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[모든 객체의 공통 메서드]규칙8.equals를 재정의할 때는 일반 규약을 따르라. (0) | 2017.04.18 |
---|---|
[객체의 생성과 삭제]규칙7.종료자 사용은 피하라 (0) | 2017.04.17 |
[객체의 생성과 삭제]규칙5. 불필요한 객체는 만들지 말라. (0) | 2017.04.16 |
[객체의 생성과 삭제]규칙4. 객체 생성을 막을 떄는 private 생성자를 사용하라 (0) | 2017.04.16 |
[객체의 생성과 삭제]규칙3. private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하라 (0) | 2017.04.16 |