Story 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) r2가 r1을 한 번 참조했기 때문에, 레퍼런스 카운트 = 2
3) r1이 리스트가 아닌 문자열을 바꿔 참조하였기 때문에, 레퍼런스 카운트 = 1
4) r2가 리스트가 아닌 문자열을 바꿔 참조하였기 때문에, 레퍼런스 카운트 = 0
è 따라서 가비지 컬렉션의 대상이 됨
è 결국엔 소멸 대상이 되었다는 뜻
2. 파이썬 인터프리터
- 파이썬 코드를 작성하고 실행하면, 먼저 ‘바이트 코드’라는 것으로 변환되어 어딘가에 저장됨
- 바이트 코드는 ‘파이썬 가상 머신(Python Virtual Machine)’위에서 실행됨
- 즉, 실제 파이썬 프로그램의 실행 주체는 파이썬 가상 머신(PVM)임
- PVM에 의해 가비지 컬렉션도 진행이 됨
- 파이썬 인터프리터 : 파이썬 코드 변환기와 가상 머신, 기본적으로 포함되는 각종 라이브러리들 모두 포함한 것
- 파이썬 인터프리터의 종류는 PVM의 구현 방식에 따라 나뉨
1) PVM이 C언어로 구성 되어있는 인터프리터 = CPython
2) PVM이 자바로 구현되어 있어서 자바에 대한 접근성이 좋은 인터프리터 = Jython
3) 마이크로소프트사의 닷넷 기반으로 만들어지고, 그 위에서 동작하는 인터프리터 = IronPython