공부기록

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

JAVA

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

gracelove91 2019. 11. 29. 20:55
반응형

다 쓴 객체 참조를 해제하라

  • 자바는 가비지컬렉터 덕분에 메모리를 직접 관리하지 않아도 된다.
  • 그렇다고 메모리 관리에 신경쓰지 않아도 된다는 뜻은 아니다.

Stack 구현한 간단한 코드 중 일부 (메모리 누수가 일어난다.)

...
public Object pop() {
    if(size == 0) {
        throw new EmptyStackException();
    }
    return elements[--size];
}
...
  • 이 코드에서는 스택이 커졌다가 줄어들었을 때 스택에서 꺼내진 객체들을 GC가 회수하지 않는다. 스택이 그 객체들의 다 쓴 참조를 여전히 가지고 있기 떄문. 다음은 그것을 개선한 코드다.
public Object pop() {
    if(size == 0) {
        throw new EmptyStackException();
    }
    Obejct result = elements[--size];
    elements[size] = null;
    return result;
}
  • 하지만 객체참조를 null처리하는 일은 예외적인 경우여야한다.

정리

  • 다 쓴 참조를 해제하는 가장 좋은 방법은 유효범위 밖으로 밀어내는 것
반응형