Garbage Collection
3가지 세대와 그에 해당하는 임계값을 기준으로 주기적으로 관리한다.
숫자가 큰 세대일 수록 오래된 객체이고, 최근에 생성된 객체에 대해 자주 실행한다.
gc.get_threshold() 를 실행하면 700, 10, 10이 나온다.
즉, 0세대=700, 1세대=10, 2세대=10 의 임계값을 갖는다.
gc.set_threshold(1000, 100, 100) 으로 임계값을 설정할 수도 있다.
0세대
메모리에 객체 할당 횟수에 해제된 횟수를 뺀 값으로 객체 수를 의미한다.
임계값을 초과하면 0세대 GC를 수행한다.
1세대
0세대 GC 이후 살아남은 객체를 1세대로 이동시킨 후 카운터를 1 증가시킨 후
이 1세대 카운터가 임계값을 초과하면 1세대 GC를 수행한다.
2세대
1세대 GC 이후 살아남은 객체들에 동일한 방식으로 GC를 수행한다.
과정
새로운 객체가 생성되면, 메모리와 0세대에 객체를 할당한다. 이 때, 객체 수가 0세대 임계값보다 크면 collect_generations()가 호출된다.
collect_generations()는 2세대, 1세대, 0세대 순으로 검사를 수행
각 세대에 대해 임계값을 검사한 후 GC를 수행한다.
더 자세한 공부가 필요함