[Python] 02. 파이썬에서 가비지컬렉션(GC)을 수행하는 방법에대해 알아본다.
Python에서 Garbage Collection을 하는 방법?
- Reference Counting
모든 객체는 참조될때마다 카운팅을 하고 참조를 해제하면 카운팅된 숫자를 줄인다. 이런식으로 카운팅하다가 0이될때 메모리에서 삭제하는 방법을 reference counting 이라고 한다.
- Reference Counting의 단점
객체가 참조될때 일반적인 경우와 다르게 순환 참조가 일어나는 경우가 있다. 자기 자신을 참조하거나 서로 참조하는 경우 참조를 해제해도 카운팅된 숫자가 0이될 수 없다.
예를 들어,
A 인스턴스 참조 +1
자기 자신 참조 +1
참조 해제 -1
이 경우 reference counting은 1이다.
- Generational Garbage Collection
세대와 각 세대의 임계값을 기준으로 Garbage Collection이 이루어진다. 세대는 0~2로 이루어 졌다. 새로 참조된 객체는 0세대로 배정된다.
이때 객체가 카운팅된 값(참조된 횟수 - 해제된 횟수)이 세대에 지정된 임계값보다 커질경우 가비지 컬렉션이 이루어지게된다.
가비지 컬렉션은 오래된 세대부터 이루어 지게되는데 각 세대마다 정해진 임계값을 기준으로 이루어진다. 그 후 객체들은 다음 세대로 넘어가게된다.