안녕하세요 돼지왕 왕돼지입니다
오늘은 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 직전을 이야기하지요.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Java] JNI Design Overview. ( JNI 의 전체 구조 ) (0) | 2012.03.21 |
---|---|
[Java] JNI 가 뭔가요? ( JNI Introduction ) (2) | 2012.03.21 |
[Android/안드로이드] Bluetooth 를 사용한 Chatting 프로그램 (0) | 2012.03.15 |
[Android/안드로이드] SMS, MMS Database Table (2) | 2012.03.14 |
[Android/안드로이드] IME 보다 먼저 BackKey 를 감지하는 방법. (0) | 2012.03.13 |
댓글