Java

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

quedevel 2022. 5. 24. 10:36
728x90
반응형
import java.util.EmptyStackException;

public class Stack {
  private Object[] elements;
  private int size = 0;

  public Object pop() {
    if (size == 0) {
      throw new EmptyStackException();
    }
    return elements[--size];
  }
}

위는 Stack 클래스의 일부분이다.

스택이 커졌다가 줄어들었을 때 스택에서 꺼내진 객체들을 가비지 컬렉터가 회수하지 않는다.

프로그램에서 그 객체들을 더 이상 사용하지 않더라도 말이다.

// 제대로 구한한 pop메서드
public Object pop() {
  if (size == 0) {
    throw new EmptyStackException();
  }
  Ojbect result = elements[--size];
  elements[size] = null;
  return result;
}
  • 객체 참조를 null 처리하는 일은 예외적인 경우여야 한다. ( 프로그램을 필요 이상으로 지저분하게 만들기 때문 )
  • 자기 메모리를 직접 관리하는 클래스라면 프로그래머는 항시 메모리 누수에 주의해야 한다.
  • 캐시 역시 메모리 누수를 일으키는 주범이다.

참고 자료

Joshua Bloch, 『Effective Java 3/E』, 개앞맵시 옮김, 프로그래밍인사이트(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=

728x90
반응형