>  기사  >  백엔드 개발  >  Python의 메모리 관리 메커니즘은 무엇입니까?

Python의 메모리 관리 메커니즘은 무엇입니까?

(*-*)浩
(*-*)浩원래의
2019-06-26 16:16:196494검색

언어의 메모리 관리는 언어 설계의 중요한 측면입니다. 언어능력을 결정하는 중요한 요소입니다. C 언어의 수동 관리든 Java의 가비지 수집이든 언어의 가장 중요한 기능이 되었습니다. 여기서는 동적으로 유형이 지정된 객체 지향 언어의 메모리 관리 방법을 설명하기 위해 Python 언어를 예로 들어 보겠습니다.

Python의 메모리 관리 메커니즘은 무엇입니까?

한 문장으로: 참조 카운팅을 주로 사용하고, 마크 제거, 세대별 재활용을 보완합니다 (추천 학습: 파이썬 영상 튜토리얼)

파이썬의 가비지 컬렉션(3종)

참조 카운팅

객체의 참조 카운터가 0이 되면 해당 객체는 메모리에 있을 수 있지만 더 이상 액세스할 수 없습니다. Python의 가비지 수집 중에는 다른 작업을 수행할 수 없습니다. Python이 참조 횟수가 0이 될 때 객체를 재활용한다면 분명히 Python의 효율성이 매우 떨어질 것입니다. 그러면 Python은 언제 객체를 재활용합니까? 이것은 좋은 질문입니다.

Python은 얼마나 많은 새 객체가 생성되었는지, 얼마나 많은 객체의 참조 카운터가 0이 되었는지 모니터링합니다. 두 값의 차이가 임계값보다 크면 메모리가 시작됩니다. 가비지 수집 및 참조를 파괴합니다. 카운터가 0입니다.

장점: 단순한 실시간 성능, 단점: 참조 카운팅을 유지하면 리소스와 순환 참조가 소모됩니다.

세대 재활용

효율성을 높이기 위해 여러 번 청소한 후에도 여전히 존재하는 물건이 많이 있습니다. 이러한 물건은 자주 재활용할 필요가 없다고 생각할 수 있습니다. 각 컬렉션은 재활용될 수 있습니다. 시간 간격은 다릅니다. 간단히 말해서, 이것은 파이썬의 세대별 재활용입니다.

구체적으로 말하면 Python의 가비지는 1세대, 2세대, 3세대로 구분됩니다. 1세대 개체는 재활용될 때마다 정리됩니다. 정리 후에도 참조 개체가 남아 있으면 2세대 컬렉션에 들어갑니다. . , 같은 방식으로 2세대 컬렉션을 정리할 때 존재하는 개체는 2세대 컬렉션에 들어갑니다.

수거물별 청소 시간 배분은 어떻게 하나요? 1세대 쓰레기를 10번 청소한 후 2세대 쓰레기를 10번 청소한 후, 2세대 쓰레기는 청소될 것이다.

표시 지우기

필요에 따라 할당합니다. 메모리가 충분하지 않으면 프로그램 스택의 레지스터 및 참조에서 시작하여 개체를 순회하고 순회된 개체를 표시한 다음 메모리에서 표시되지 않은 개체를 지웁니다.

더 많은 Python 관련 기술 기사를 보려면 Python Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 Python의 메모리 관리 메커니즘은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.