← 질문 목록
#75깊이 0
참조 횟수가 0이 아닌 객체도 왜 수거되는가?
CPython의 참조 카운팅만으로는 서로를 가리키는 순환 객체를 해제할 수 없다. 외부에서 닿지 않는 순환은 별도 순환 수집기가 찾아 수거한다.
| 기준 | 참조 카운팅 | 순환 수집 |
|---|---|---|
| 해제 조건 | 참조 수 0 | 외부에서 도달 불가 |
| 시점 | 대체로 즉시 | 수집 주기 |
| 강점 | 예측 가능 | 순환 처리 |
참조 횟수가 0이 되면 대부분 즉시 해제된다. 순환 수집기는 추적 대상 컨테이너를 세대별 정책으로 검사한다. 오래 살아남은 객체는 덜 자주 본다.
gc.disable()은 자동 순환 수집만 끈다. 참조 카운팅은 계속 동작한다. 수집 빈도를 낮추면 정지는 줄지만 순환 객체의 메모리 회수는 늦어진다.
추천 꼬리질문
관련 질문
- 가비지 컬렉션이 멈춤을 만드는 이유는?언어 · 런타임참조 횟수 기반 GC와 추적 기반 GC의 차이는 멈춤 현상의 발생 빈도와 범위에 영향을 준다.
- 순환 참조 객체도 회수할 수 있는 이유는?언어 · 런타임순환 참조 해결과 참조 횟수가 0이 아님에도 수거되는 원리는 모두 가비지 컬렉션의 도달 가능성(Reachability) 개념을 다룬다.
- 화면이 닫혔는데 객체가 남는 이유는?모바일둘러싸인 참조로 인해 참조 횟수가 0이 아닌 객체가 수거되는 원리(GC)는 객체가 남는 이유를 분석하는 밑바탕 개념이다.
- 파이썬의 가비지 컬렉션은 무엇으로 동작하는가?언어 · 런타임둘 다 가비지 컬렉션의 수거 대상 결정 기준인 참조 횟수와 도달 가능성으로 연결된다.
- 값 타입과 참조 타입은 무엇으로 구분하는가?언어 · 런타임참조 타입의 생명주기 관리와 가비지 컬렉션의 도달 가능성 판단 기준을 다룬다.