본문 바로가기

Language/Python

[파이썬] 가비지 컬렉션

가비지 컬렉션이란?

모든 언어에서 변수를 등록하면 변수에 메모리가 메모리의 주소값이 할당된다. 그리고 변수의 크기만큼 메모리를 쓰게되는데 이 메모리는 우리가 알고있는 RAM을 의미한다.

RAM은 휘발성 저장공간이다. 용량이 적지만 컴퓨터를 끄면 사라지는 데이터 공간이다. 대신에 빠르다.

만약 이 메모리 공간을 비효율적으로 사용하여 사용자의 메모리를 많이 잡아먹는다면 흔히 렉이 걸린다고 하듯 프로그램이 느려질 수 있다. 따라서 이 공간을 효율적으로 관리하는것이 프로그램을 빠르게 돌리는데에 있어서 중요하다.

가비지 컬렉션은 쓰지않는 값을 모아서 소멸시킨다.

레퍼런스 카운트

레퍼런스(reference) = 참조

파이썬은 변수의 레퍼런스 카운트가 0이 되었을때 그 변수는 소멸 되상이 되고 일정 규칙에 의해 가비지 컬렉션이 실행될 때 이 값은 소멸된다.

s = "hello world"

위와 같이 변수를 등록하게 되면 s라는 변수는 "hello world" 문자열을 '참조'한다. 참조하는 변수가 1개가 되어 레퍼런스 카운트는 1이 된다.

s2 = s

위와 같이 선언하면 s2 또한 s가 가리키는 문자열을 똑같이 참조하게 된다. 따라서 레퍼런스 카운트는 2가 된다.

s = 123

만약 위와 같이 s가 가리키는 값을 123으로 바꿨다.

그렇다면 "hello world"는 레퍼런스 카운트가 0이 되고, 123은 레퍼런스 카운트가 2가 된다.

어떠한 변수도 "hello world"를 쓰고 있지 않다. 따라서 곧 가비지 컬렉션에 의해 "hello world"는 소멸 된다.

 

 

이러한 가비지 컬렉션을 실행하는 주체는 PVM(Python virtual Machine)이다.