Java Reference (Soft vs Strong)

Reference

Reference(참조)란 무엇일까?

사전적 의미로는 어떤 것에 대해 말하기, 정보를 얻기 위한 참고/참조, 문의 조회가 있다. Java 에서는 정보를 얻기 위한 참조가 가장 가까운 의미라고 생각한다.

아래 코드를 보자

Parent a;

a.print() // a is not initiallized
a = new Child()

첫 줄만 쓰고 a 변수를 사용할 수 없다. a의 메소드에 접근하려고 하면 초기화가 되어있지 않다고 나온다. 객체를 사용하기 위해서 new 키워드를 사용하고 내부적으로 heap 영역에 할당이 된다. a라는 정보를 접근하기 위해서 해당 메모리를 참조/참고한다고 생각하면 된다.

안드로이드를 개발하면 짧은 시간 가끔 쓰이는 객체를 사용할 때가 있다. 예를 들면 앱을 시작했을 때 변조/해킹 방지, 이미지 로딩 프로세스 등이 있다고 해보자. 이들은 호출이 되는 시점에 짧은시간 동작을 하고 끝이 난다. Heap 영역에는 사용하지 않는 공간을 빈도가 낮고 짧은 시간을 사용하는 객체가 차지하고 있다라는 점이다.

→ 메모리 누수가 많이 되어 OOM(Out of Memory) 현상이 발생되어 애플리케이션이 종료되는 현상이 발생할 수 있다.

StrongReference

Parent a = new Child()

SoftReference

SoftReference<T> softRef = new SoftReference(new T());

WeakReference

WeakReference<T> weakRef = new WeakReference(new T());

PhantomReference

PhantomReference(T referent, ReferenceQueue<? super T> q)

결론



Related Posts