윤성우의 열혈 파이썬 (중급)

Story 01. 레퍼런스 카운트와 가비지 컬렉션

아린// 2021. 7. 5. 20:01

1. 가비지 컬레션

 

 

 - s에 문자열이 저장되었다고 생각하지만, 사실 문자열 객체에 s라는 이름이 붙은 상황임

 - , python의 변수는 빈 상자라기 보단, 붙였다 떼었다 할 수 있는 포스트잇의 개념임

 - 따라서 위 코드에 대한 표현은

    1) 변수 s가 문자열 ‘Garbage Collection’참조한다.

    2) 변수 s가 문자열 ‘Garbage Collection’레퍼런스한다.

 - 참조 : 포스트잇을 가져다 붙인 것

 

 

 - r이라는 이름으로 리스트를 참조한 것

 - 이렇게 생성된 리스트 [1, 2, 3]은 언제 소멸될까?

 - 소멸되지 않고 계속 메모리 공간을 차지하면 안되기 때문에 분명 소멸되는 상황이 옴

 - 그 상황 = “객체를 아무도 참조하지 않는 상황

 

 

 - 변수 r이 참조 대상을 문자열로 바꿨음

 - 다음과 같은 상황이 오면 리스트 [1, 2, 3]을 아무도 참조하지 않기 때문에 더 이상 접근할 수 없게 됨

 - , 즉시 소멸되는 것이 아님

     : 소멸 대상으로 등극만 해놓고 시스템에 시간적인 여유가 생길 때 소멸시키게 함

     : 이러한 일련의 소멸 규칙 및 과정을 가리켜 가비지 컬렉션(Garbage Collection’이라고 함

 

 

 1) 리스트 [1, 2, 3]r1이 한번 참조했기 때문에, 레퍼런스 카운트 = 1

 2) r2r1을 한 번 참조했기 때문에, 레퍼런스 카운트 = 2

 3) r1이 리스트가 아닌 문자열을 바꿔 참조하였기 때문에, 레퍼런스 카운트 = 1

 4) r2가 리스트가 아닌 문자열을 바꿔 참조하였기 때문에, 레퍼런스 카운트 = 0

    è 따라서 가비지 컬렉션의 대상이 됨

    è 결국엔 소멸 대상이 되었다는 뜻

 

 

 

2. 파이썬 인터프리터

 - 파이썬 코드를 작성하고 실행하면, 먼저 바이트 코드라는 것으로 변환되어 어딘가에 저장됨

 - 바이트 코드는 파이썬 가상 머신(Python Virtual Machine)’위에서 실행됨

 

 

 

 - , 실제 파이썬 프로그램의 실행 주체는 파이썬 가상 머신(PVM)

 - PVM에 의해 가비지 컬렉션도 진행이 됨

 - 파이썬 인터프리터 : 파이썬 코드 변환기와 가상 머신, 기본적으로 포함되는 각종 라이브러리들 모두 포함한 것

 

 - 파이썬 인터프리터의 종류PVM의 구현 방식에 따라 나뉨

    1) PVM C언어로 구성 되어있는 인터프리터 = CPython

    2) PVM이 자바로 구현되어 있어서 자바에 대한 접근성이 좋은 인터프리터 = Jython

   3) 마이크로소프트사의 닷넷 기반으로 만들어지고, 그 위에서 동작하는 인터프리터 = IronPython