Reference Type

kimji1
3 min readMar 10, 2020

--

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에서 해제되었는지 알고자할 때 유용

--

--

kimji1
kimji1

No responses yet