Understanding Java's Reference classes: SoftReference, WeakReference, and PhantomReference
카테고리 없음 2014. 4. 9. 23:57참조의 강한 정도 : 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