Strong Reference
StringBuilder builder = new StringBuilder();
- default reference type
- 위에서 builder는 Strong Reference
- Strong Reference는 GC 대상이 아님
(Strong Reference로 객체를 참조하면 GC 대상이 아니어짐)
Weak Reference
WeakReference<StringBuilder> weakBuilder = new WeakReference<StringBuilder>(builder)
- default reference type이 아님
- Weak Reference가 되기 위해서는 명시적으로 위처럼 선언해줘야 함
- 위의 참조가 유일한 참조일 경우 StringBuilder 객체를 GC할 수 있음
(GC 대상임) - 강력하지 않은 참조로 memory에 남기는걸 강제하지 않을 정도의 참조
- 기본적으로 Weak Reference 객체는 메모리에 조금 더 유지됨
> 메모리를 사용할 수 있을 때까지 GC되지 않고 남아있음 - OutOfMemoryError의 위험이 없음
OOM이 발생할 상황이라면 GC
Soft Reference
- Weak Reference와 동일하지만 객체에 대한 참조를 버리고자 함
> 객체에 대한 가장 강한 참조라면 다음 GC 주기에 제거됨
Phantom Reference
- soft reference, weak reference와는 조금 다름
> 너무 약하게 참조하고 있어 get()메서드는 항상 null을 반환 - 이 타입의 Reference 객체의 사용은 이 객체가 죽은 것으로 알고 있을 때 ReferenceQueue에서 enqueue 시점을 추적하는 것
- 정확히 언제 객체가 memory에서 해제되었는지 알고자할 때 유용