파이썬 : 가비지 컬렉션

파이썬 GC 주로 추적 가비지하는 레퍼런스 카운트 (참조 카운팅)을 사용했다. 문제 발생 및 시간 공간의 방법에서 "세대 복구"(세대 컬렉션)에 의해 쓰레기 수집의 효율성을 향상시킬 수 있습니다 참조를 해결하기 위해 루프 "플래그 분명"(마크 스윕) 컨테이너 개체 - 참조 카운트에 의해의 기초.
1 개 레퍼런스 카운트

각각의 PyObject 오브젝트 레퍼런스 카운트로서 사용 ob_refcnt 콘텐츠를 가져야한다. 새로운 객체가 참조하는 경우, 삭제 된 개체를 참조 할 때 ob_refcnt을 증가, 참조 횟수를 줄일 수의 ob_refcnt은 0이며, 삶의 목적은 끝났습니다.

장점 :

简单
实时性

단점 :

维护引用计数消耗资源
循环引用

2마르크 - 스윕 메커니즘

기본적인 아이디어는도 측 구성을 참조하면, 시작 노드 오브젝트하는 이송 여유 메모리 프로그램 스택에서 참조 레지스터까지 할당 시간을 요구하고, 표시된 태그에 액세스 할 수있는 모든 오브젝트는, 다음 스윕 메모리 공간을 다시 출시 된 모든 오브젝트를 표시하지.
3 점 생성 기술

세대 회수 전체적인 아이디어는 모든 시스템 메모리 블록은 그들의 생존에 따라 서로 다른 세트들로 분할되고, 각 세트는 생존 시간이 가비지 콜렉션 "세대"의 주파수의 증가와 "세대"된다 감소 생존 시간은 몇 가지 사용 가비지 콜렉션 측정하는 것이 이후.

파이썬은 객체의 세 세대의 기본 설정, 객체의 이상, 인덱스 번호 큰 생존 시간을 정의합니다.

예 : 특정 경과 후의 M 메모리 블록 살아 세번 가비지 콜렉션을 세정 할 때, 우리는 세트 (A)에 메모리 블록 M에 드로잉되며, 새롭게 할당 된 메모리에 집합 B로 분할된다. 가비지 컬렉션 작업을 할 때, 대부분의 경우에만 B 가비지 콜렉션의 수집 및 수집 가비지 수집은 적은 메모리 가비지 콜렉션이 해결해야 할 구성하는 것은 시간의 긴 기간, 효율성을 위해 분리 할 자연적으로 증가했다. 이 과정에서, 집합 B의 일부 메모리 블록들이 긴 생존 시간이 세트 (A)에 전송 될 수 있기 때문에, 물론, 실제로, 설정, 일부 쓰레기가있는 쓰레기되는 세대이 메커니즘 때문에 그것은 지연됩니다.

추천

출처blog.csdn.net/weixin_44523387/article/details/91897025