C/C++처럼 직접 메모리 관리를 해야하는 언어와 달리, GC가 포함된 언어를 사용하면 프로그래밍이 아주 편해진다. 

 위의 코드는 기능상 문제는 없으나, 메모리 누수 문제가 있다. 이 메모리 누수는 과연 코드의 어느 부분에서 생길까? 메모리누수는 바로

pop() 메서드에서 발생하는데, elements[--size]를 리턴을 하였으나 , element[size]에 있는 객체는 메모리가 해제되어 있지 않기 떄문에 메모리 누수가 생긴다. 이와 같은 문제를 해결하기 위해서는 쓸일 없는 객체(element[size]) 참조는 무조건 null로 만드는 것이다.

하지만 위와 같은 참조처리는 항상 그럴필요는 없는데, 프로그램만 난잡해지기 때문이다. 객체 참조를 null로 처리하는 것은 규범이라기 보단 예외적인 조치가 되어야 한다. 만기 참조를 제거하는 가장 좋은 방법은 변수를 정의할 때 그 유효범위를 최대한 좁게 만들면 자연스럽게 해결된다.


캐시나 리스너를 구현할 때도 메모리 누수가 자주 발생하는데, WeakHashMap을 가지고 캐시를 구현하면 해결할 수 있다.



+ Recent posts