Immortal objects
•
주로 CPython 인터프리터와 관련된 개념으로, 가비지 컬렉터가 수집하지 않는 객체
•
Python의 내부 동작과 관련된 객체
•
참조 횟수(reference count)가 0이 되어도 파괴되지 않음.
•
이러한 객체는 메모리 누수를 방지하기 위해 특별히 관리됨.
◦
일반적으로, Python에서 객체는 참조 횟수(reference counting) 메커니즘을 사용하여 메모리가 관리되는데, 객체의 참조 횟수가 0이 되면 가비지 컬렉터에 의해 수집되고 메모리가 해제된다.
◦
그러나 특정 객체는 가비지 컬렉터에 의해 수집되지 않도록 특별히 관리되어야 할 필요가 있는데 해당 객체가 바로 Immortal objects이다.
예시
•
모듈 객체: Python 인터프리터의 수명 동안 지속적으로 사용되며, 프로그램의 실행이 끝날 때까지 메모리에 유지된다.
•
내장 함수 및 예외: len(), range(), KeyError 등과 같은 내장 함수 및 예외는 프로그램 전반에 걸쳐 자주 사용되며, 일반 객체처럼 수집되면 안 된다.
•
인터프리터의 내부 객체: 인터프리터의 내부 동작과 관련된 객체로, 가비지 컬렉터의 수집 대상이 되어서는 안 된다.
사용되는 곳
•
내부 동작과 관련된 특정 상황에서 사용
•
Python 인터프리터 초기화 및 종료
•
내장 모듈 및 객체
•
Python의 전역 인터프리터 잠금(GIL)
◦
GIL은 CPython 인터프리터에서 동시성을 관리하기 위한 메커니즘입니다. GIL 자체와 관련된 객체들도 "immortal"로 간주
•
CPython의 내부 데이터 구조
◦
CPython 구현의 일부인 내부 데이터 구조 (예: 인터프리터 상태, 메모리 할당기 등) 역시 가비지 컬렉터에 의해 수집되지 않도록 "immortal"로 취급
•
확장 모듈