프로그래밍 놀이터/안드로이드, Java

[Java] WeakReference 와 SoftReference 의 차이점.

돼지왕 왕돼지 2012. 3. 16. 18:35
반응형

안녕하세요 돼지왕 왕돼지입니다

오늘은 Weak Reference 와 Soft Reference 에 대해 알아보았습니다.


WeakReference.

Object 를 참조하는 형태 세 가지 중의 하나입니다. GC 가 발생할 때 어떤 object 가 weakly-reachable 이라면 다음과 같은 일이 발생합니다.

1. Weakly-reachable object "를" 참조하는 모든 reference 를 모은다.
2. Weakly-reachable object "가" 참조하는 모든 reference 를 모은다. ( 참조형태는 strong 이든 weak 이든 상관없다. )
3. 1, 2 를 통해 모은 모든 reference 를 한번에 다 해제한다.
4. reference 가 해제된 object 들은 finalization 단계에 들어가며 메모리가 해제된다.

이 Weak Reference 는 밖에서 strong 하게 참조하던 참조가 끊어졌을 때, GC 의 대상이 되도록 하는 데 쓰이면 좋습니다. 즉 그 중요성이 그렇게 크지 않은 경우에 주로 쓰이기 때문에 Cache 에 적합한 녀석이라고 볼 수 있습니다.




SoftReference.

Object 를 참조하는 형태 세 가지 중의 하나입니다. GC 가 발생할 때 어떤 object 가 softly-reachable 이라면 다음과 같은 일이 발생합니다.

1. Softly-reachable object "를" 참조하는 모든 reference 를 모은다.
2. Softly-reachable object "가" 참조하는 모든 reference 를 모은다. ( 이 때 참조형태는 strong reference 이다. )
3. 1, 2 를 통해 모은 모든 reference 를 한번에 다 해제한다. ( VM 에 따라 다르며, 최대한 늦춥니다. )
4. reference가 해제된 object 들은 finalization 단계에 들어가며 메모리가 해제된다.

3번 단계에서는 VM 에 따라 다르지만 대부분 이 해제 시점을 최대한 늦춥니다. 최대한의 시점은 OutOfMemoryError 입니다. 이 녀석도 Weak Reference 처럼 Cache 에 적합한 녀석인데, 그 생명력이 더 길다는 장점이 있습니다. ( 단점일수도.. )





WeakReference와 SoftReference 의 차이점

둘의 가장 큰 차이점은 언제 GC 가 되느냐입니다.
WeakReference 의 경우는 strong reference 가 모두 끊기고 GC 타이밍이 되었을 때 바로 GC routine 을 타게 됩니다.반면 SoftReference 는 최대한 GC routine 을 늦게 탑니다. 즉, strong reference 가 모두 끊겼다고 해도, 메모리에 여유가 있으면 GC 가 수행되지 않는 것이죠. 메모리에 여유가 없다는 것은 OutOfMemoryError 직전을 이야기하지요. 




도움이 되셨다면 손가락 꾸욱~






반응형