← 질문 목록
#63깊이 0
순환 참조 객체도 회수할 수 있는 이유는?
HotSpot의 추적식 수집기는 참조 횟수가 아니라 GC 루트에서 도달 가능한지를 본다. 서로 가리켜도 루트에서 닿지 않으면 둘 다 회수 대상이다.
GC 루트→객체 그래프
참조를 따라 생존 객체를 표시한다
수집기→미도달 객체
메모리를 회수한다
수집기→생존 객체
필요하면 이동하고 압축한다
GC 루트에는 실행 중인 스레드의 스택 참조와 정적 참조 등이 포함된다. 루트가 살아 있으면 그 경로의 객체도 살아 있다.
세대별 수집은 대다수 객체가 빨리 죽는다는 관찰을 이용한다. 새 객체를 자주 수집하고 오래 산 객체는 승격한다.
표시와 이동 과정에는 일시 정지가 생길 수 있다. 동시 수집기는 일부 단계를 애플리케이션과 겹쳐 정지 시간을 줄인다.
추천 꼬리질문
관련 질문
- 가비지 컬렉션이 멈춤을 만드는 이유는?언어 · 런타임순환 참조 해결을 위한 마킹 단계 등 GC의 작동 방식은 멈춤 현상이 발생하는 근본적인 원인과 연결된다.
- 참조 횟수가 0이 아닌 객체도 왜 수거되는가?언어 · 런타임두 질문 모두 참조 횟수(Reference Counting)의 한계와 이를 극복하는 가비지 컬렉션의 작동 원리를 다룹니다.
- 파이썬의 가비지 컬렉션은 무엇으로 동작하는가?언어 · 런타임둘 다 가비지 컬렉션이 객체 수거로 결정하는 기준과 순환 참조 해결 방식에 대해 다룬다.
- 값 타입과 참조 타입은 무엇으로 구분하는가?언어 · 런타임참조 타입의 객체 간 순환 참조 문제는 가비지 컬렉션의 핵심 고려 사항이다.
- 수집기는 처리량과 지연 중 무엇으로 고르는가?언어 · 런타임가비지 컬렉터가 객체를 회수하는 판단 기준이라는 GC의 공통 개념을 다룹니다.