참조의 강한 정도 : Strong > Soft > Weak > Phantom


Strong References

일반적인 객체 참조를 말함 

일반적으로는 gc에도 정리되지 않지만 항상 그렇진 않다.

예) Server svr = new Server();


Soft References

WeakReference와 비슷하나 gc에 정리될 가능성이 적다

VM이 OOM가 발생할 것같으면 정리함, 최대한 늦게 정리


Weak References

메모리에 머물지 않고, 다음 gc때 정리 대상

예) WeakReference<Cachable> weakData = new WeakReference<Cacheable>();

다시 쓸려고 할때 항상 null 체크 유의


Phantom References

참조중 가작 약한 참조, get 하면 항상 null 나옴

ReferenceQueue는 죽은 참조의 상태를 관리

WeakReference는 finalized 또는 gc 전에 ReferenceQueue에  enqueuing되는 반면(살릴수있다)

PhantomReference는 finalized 또는 gc 후에  ReferenceQueue에  enqueuing된다.

좋은 점은 개발자가 메모리로 부터 객체 제거를 확실히 결정하게 해준다.(예로 큰이미지 다룰때)

실제로는 거의 사용하지 않음



참고자료

http://stackoverflow.com/questions/3329691/understanding-javas-reference-classes-softreference-weakreference-and-phanto


http://www.rallydev.com/community/engineering/java-references-strong-soft-weak-phantom


https://weblogs.java.net/blog/2006/05/04/understanding-weak-references



Posted by 빈솔B
,