Python개발자라면 알아야 할 메모리 관리 Python Garbage Collection

SUN·2024년 2월 11일
0
post-thumbnail

Garbage Collection이란?

Python은 C언어처럼 사용자가 직접적으로 메모리를 관리하지 않는다.
즉, 언어 자체에서 메모리를 할당하고 더 이상 사용되지 않는 객체를 자동으로 해제해 관리해 주는데 이때 사용되는것이 GC(Garbage Collection)이다.

Garbage Collecting 방법

python에서 사용하는 메모리 관리 방법에는 크게 2종류가 있다.

  • Reference Counting
  • General Garbage Collector

1. Reference Counting 방법

개요

reference count(참조 카운팅)은 해당 객체에 대한 참조 횟수를 카운팅해 count가 0 이 되면 메모리 할당을 해제해 주는 방식이다.

이는 객체가 생성될 때 count가 1로 시작하여 다른 객체가 해당 객체를 참조할 때마다 카운트가 증가한다.

참조가 끊길 때마다 count는 감소하며 count가 0이 된 순간 해당 객체는 더이상 참조되지 않은 것으로 판단해 메모리에서 해제된다.

예시

예제 코드
a = Car() #객체 생성
b = a # b가 a를 참조  
print(sys.getrefcount(a)) #출력: 3 (a,b,getrefcount의 인자)
b = None #참조 해제
print(sys.getrefcount(a)) #출력: 2

이 경우 순환 참조의 경우 두 객체의 reference count가 0이 되지 않아 메모리 누수가 발생할 수 있다.
이를 해결하기 위해 GC가 사용하는 다른 방식이 바로 Generational Garbage Collection 이다.

2. Generational Garbage Collection

이 메커니즘은 객체를 "세대"로 나누어 각 세대에 따라 가비지 컬렉션을 수행합니다. 대부분의 객체는 짧은 시간 동안만 사용되며, 오래된 객체가 살아남으면 해당 객체는 더 오랜 기간 동안 사용될 가능성이 높습니다. 따라서 새로운 객체와 오래된 객체를 구분하여 관리함으로써 가비지 컬렉션의 효율을 높입니다.

결론

python은 reference counting 방식을 기본적으로 사용하고 General Garbage Collection과 같은 방식으로 Reference Counting 방식으로 관리할 수 없는 순환 참조 혹은 자기 참조 등의 상황에서 메모리를 관리한다.

0개의 댓글