티스토리 뷰

가비지 콜렉터란?

메모리가 부족할 때 이런 가비지들을 메모리에서 해제 시켜 다른 용도로 사용 할 수 있게 해주는 프로그램

 

메모리 할당 전략

파이썬의 메모리 할당과 해제는 자동적으로 이뤄진다. 유저가 직접 핸들링해야할 필요가 없다. 파이썬은 메모리 할당에 두가지 전략을 사용한다.
- 레퍼런스 카운팅
- 가비지 콜렉션

레퍼런스 카운팅

- 파이썬 2.0에서 파이썬 인터프리터는 메모리 관리를 위해 오직 레퍼런스 카운팅만 사용했다. 레퍼런스 카운팅을 어떤 객체가 다른 객체이 의해 참조된 획수를 세는 것이다. 만약 객체에 대한 참조가 제거되면 객체에 대한 참조 카운트는 감소한다. 만약 레퍼런스 카운트가 0이면 해당 객체는 해제된다.

 

가비지 콜렉션

- 참조 사이클(객체의 레퍼런스 카운트가 0에 도달하지 못하는 현상)이 발생하면 해당 객체는 영원히 자동적으로 해제되지 못한다. 때문에 파이썬 가비지 콜렉터가 생겨났다. 만약 파이썬 내에서 재사용되지도 않으면서 0에 도달하지 못한다면 가비지로 간주되어 현재 파이썬에서는 할당 해제될 수 있다.

 

자동 가비지 콜렉션

참조 주기를 검색하려면 계산 작업이 필요하므로 가비지 수집은 예약된 활동이어야 한다. Python은 객체 할당 및 객체 할당 해제 임계값을 기반으로 가비지 수집을 예약한다. 할당 횟수에서 할당 해제 횟수를 뺀 횟수가 임계값보다 크면 가비지 수집기가 실행된다. gc 모듈을 가져오고 가비지 수집 임계값을 요청하여 새 객체(Python에서는 0세대 객체로 알려진 객체)에 대한 임계값을 검사할 수 있다.

수동 가비지 콜렉션

참조 사이클에 의해 소비되고 있는 메모리를 핸들링하기 위해 가비지 콜렉터를 실행중인 프로그램상에서 수동으로 발생시키는 것도 좋다. 이 경우 모듈(https://docs.python.org/3/library/gc.html)을 임포트한 후 사용한다.

 

참고 링크

- Memory Management in Python

- https://www.geeksforgeeks.org/garbage-collection-python/

반응형

'Programming > Language' 카테고리의 다른 글

Async IO in Python <1>  (0) 2022.09.20
Typescript 시작!  (0) 2021.05.15
댓글