GC를 "안 쓰는 객체를 알아서 치워주는 무엇" 정도로 외웠는지, Root Set 기반 도달 가능성 모델로 설명할 수 있는지를 가르려는 질문이다. 답에 따라 참조 타입 선택·누수 진단·튜닝 영역의 후속 질문이 갈린다.
JVM의 GC는 "누군가 아직 쓰고 있나"를 Root Set에서 출발하는 참조 사슬로 판정한다. 루트는 활성 스레드의 스택 변수, 클래스의 정적 필드, JNI 핸들, 모니터를 잡고 있는 객체 등으로 구성되며, 여기서 참조로 도달 가능한 객체는 살리고 도달 불가능한 객체는 회수 후보로 둔다. SoftReference·WeakReference·PhantomReference는 같은 "참조"라도 GC가 다른 강도로 보고, 메모리 압박 정도와 참조 타입에 따라 회수 시점이 갈린다. 즉 "참조가 끊겼다"는 사실 자체가 아니라 루트에서 그 객체까지 닿는 경로가 끊겼느냐가 기준이다.
힙 덤프에서 GC root까지 경로를 따라 누수를 좁혀 본 경험이 있다면 Reachability 모델을 실제로 적용한 사례로 풀 수 있다
캐시를 WeakHashMap·SoftReference로 바꿔 본 경험이 있다면 참조 타입 선택의 트레이드오프 사례로 연결할 수 있다
ThreadLocal·정적 컬렉션 누수를 잡았던 경험이 있다면 "숨은 루트"의 구체적 예로 이어 쓸 수 있다
이벤트 리스너·콜백 등록 후 해제 누락으로 누수가 났던 경험이 있다면 도달 가능성이 어디서 유지됐는지 설명하기 좋다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.