객체 참조의 유형
어떤 유형들이 있나
자바에서는 객체의 참조 유형이 나뉘어 있다. Strong, Soft, Weak, Phantom 이렇게 네 가지가 있다.
각 참조별 특징
Strong Reference
보통 내가 할당하면 생기는 참조의 유형이다. 객체를 직접 참조하는 경우로 '도달 가능' 하면 곧 활성 객체로 분류되어 GC의 대상이 되지 않는다.
Soft Reference
메모리 공간이 부족할 때만 회수된다. 점점 쌓이다 쌓이다 도저히 안될때, JVM 이 포기하고 GC 가 회수하도록 한다는 것으로 이해하자. 캐싱에 유용하게 쓰일 수 있다는데 쓰이는걸 전혀 못봤다. 그냥 레디스나 헤이즐캐스트 쓰면 썼지 자체적으로 캐시 풀로 운용할 컬렉션을 만든다면 써봄직은 한 것 같다.
Weak Reference
이건 외부 설명을 그대로 첨부한다.
다음 가비지 컬렉션 사이클에서 회수될 가능성이 높습니다.
WeakHashMap
과 같은 데이터 구조에서 키가 더 이상 사용되지 않으면 관련 항목을 자동으로 제거하고자 할 때 유용합니다.
Phantom Reference
java.lang.ref.PhantomReference
클래스를 사용하여 참조합니다.이 참조는 다른 종류의 참조와는 다르게, 객체의 실제 접근은 허용되지 않습니다.
주로 객체가 메모리에서 완전히 제거되기 전에 어떤 종류의 작업을 수행하기 위해 사용됩니다.
설명을 봐도 언제 쓰이는지 도통 감이 안와서 GPT 한테 물어봤다. '실제로 대부분의 자바 개발자는 일상적인 작업에서 PhantomReference
를 사용할 필요가 없습니다.' 라고 할 정도로 딱히 쓰임이 없는 것 같다. 이런게 있다 정도만 알고 넘어간다.
객체 참조 유형에도 이렇게 네 가지가 있고(단순히 하나가 아니라는거), Strong, Soft 의 차이만 잘 인지하면 될 것 같다.
Last updated