JavaStudy

ITEM6 : 쓸모없는 Object refreences 를 없애라

  • 자바는 C/C++ 과는 다르게 더이상 참조되지 않으면 객체들이 사용하던 메모리가 자동으로 회수된다. 마법은 아니므로 주의!
     public Object pop(){
          if(size == 0)
               throw new EmptyStackException();
          Object result = elements[--size];
          elements[size] = null; // 쓸모없는 reference 를 제거해주어야한다.
    
  • null 처리를 해주면 참조를 제거해서 메모리에서 사라지도록 할수있고, 잘못된 참조로 원하지 않게 작동하지 않고 NullPointerException 이 바로 일어나도록 할수있다.
  • 클래스가 자기자신의 메모리를 관리할때 프로그래머가 메모리 릭에 대해 조심해야한다. 특정 element 가 free 되면 object reference 들은 모두 null 처리가 되어져야 한다.
  • 캐쉬 상황에서 메모리 릭이 발생하기 쉽다. 캐쉬 외부에 캐쉬의 키에 대한 참조가 있을 동안만 캐시에 저장된 항목이 유효한 캐쉬를 구현해야한다. WeakHashMap을 캐시로 사용하면 key값의 외부 참조에 따라 결정되도록 할수있다. (weak reference)
  • 콜백과 리스너에서도 메모리릭이 발생하기 쉽다. 명시적으로 콜백을 deregister 시키지 말고 weak reference 를 사용하거나 키값들을 weakHashMap 을 사용해 저장하라.