← 질문 목록
#241깊이 0
파이썬의 가비지 컬렉션은 무엇으로 동작하는가?
CPython은 참조 횟수를 세는 것을 기본으로 하고, 서로 물고 도는 것을 걷어 내려고 세대별 수집기를 함께 쓴다. 기본적으로 참조 횟수가 0이 되면 즉시 메모리에서 제거한다.
| 메커니즘 | 역할 |
|---|---|
| 참조 횟수 | 기본 메커니즘. 0이 되면 즉시 해제 |
| 세대별 GC | 보조 메커니즘. 순환 참조 해결 |
참조 횟수 계산은 빠르고 즉각적이다. 하지만 두 객체가 서로를 가리키는 순환 참조가 발생하면 횟수가 0이 되지 않아 메모리 누수가 생긴다.
순환 참조는 세대별 GC가 주기적으로 찾아낸다. 객체를 세대로 나눠 오래 살아남은 것은 덜 자주 훑는다. 세대를 몇 개로 두는지는 판마다 바뀌어 왔다.
추천 꼬리질문
관련 질문
- 가비지 컬렉션이 멈춤을 만드는 이유는?언어 · 런타임둘 다 가비지 컬렉션의 동작 방식과 그로 인한 영향인 멈춤 현상에 대해 다룬다.
- 순환 참조 객체도 회수할 수 있는 이유는?언어 · 런타임둘 다 가비지 컬렉션이 객체 수거로 결정하는 기준과 순환 참조 해결 방식에 대해 다룬다.
- 수집기는 처리량과 지연 중 무엇으로 고르는가?언어 · 런타임둘 다 가비지 컬렉션(GC)의 동작 방식과 선택 기준이라는 공통된 주제를 다룹니다.
- 참조 횟수가 0이 아닌 객체도 왜 수거되는가?언어 · 런타임둘 다 가비지 컬렉션의 수거 대상 결정 기준인 참조 횟수와 도달 가능성으로 연결된다.
- 값 타입과 참조 타입은 무엇으로 구분하는가?언어 · 런타임가비지 컬렉션은 기본적으로 참조 타입 객체의 메모리 회수를 위해 동작한다.