Python 메모리 관리 실례 분석
a = 1
a 는 인용 이 고 1 은 대상 이다.Python 캐 시 정수 와 짧 은 문자열,대상 은 한 개 뿐 이지 만 긴 문자열 과 다른 대상(목록 사전)은 많은 대상(할당 문 구 는 새로운 대상 을 만 듭 니 다)이 있 습 니 다.
from sys import getrefcount
a=[1,2,3]
print(getfrecount(a))
4 를 되 돌려 줍 니 다.어떤 인용 을 매개 변수 로 getfree count 에 전달 할 때 임시 인용 을 만 들 었 습 니 다.+1.대상 참조 대상
class from_obj(object):
def __init__(self, to_obj):
self.to_obj = to_obj
b = [1,2,3]
a = from_obj(b)
print(id(a.to_obj))
print(id(b))
c = [b,b]
a 인용 대상 b,c 인용 b 두 번.obgraph 패키지(이전에 xdot 설치)를 통 해 토폴로지 구 조 를 정리 합 니 다.
x = [1, 2, 3]
y = [x, dict(key1=x)]
z = [y, (x, y)]
import objgraph
objgraph.show_refs([z], filename='ref_topo.png')
절대 두 대상 이 서로 인용 하거나 자신 을 인용 하여 인용 고 리 를 형성 하여 쓰레기 회수 체제 에 번 거 로 움 을 가 져 오지 마 세 요.
쓰레기 수 거
인용 계수 가 0 인 대상 을 회수 합 니 다.쓰레기 를 회수 할 때 python 은 다른 임 무 를 할 수 없고 효율 을 낮 출 수 없 기 때문에 항상 쓰레기 를 회수 하 는 것 이 아 닙 니 다.python 기록 분배 대상(object allocation)과 분배 취소 대상(object dealrocation),차 이 는 특정한 한도 값 보다 높 습 니 다.
import gc
print(gc.get_threshold())
(700,10,10)700 은 시작 한도 값 이 고 두 개의 10 은 세대 별로 관련 한도 값 을 회수 하 며set_threshold()
을 통 해 재 설정 합 니 다.쓰레기 수 거 를 수 동 으로 사용 합 니 다gc.collect()
.분할 회수
기본 가설:오래 살 수록 쓰레기 가 될 수 없다.
대상 은 0,1,2,3 대로 나 뉜 다.새 대상 0 대 는 쓰레기 수 거 를 거 쳐 다음 세대 로 살아 남는다.쓰레기 수 거 가 시 작 될 때 반드시 모든 0 대 를 스 캔 하고 0 대가 일정한 횟수 의 쓰레기 수 거 를 거치 면 0 대 와 1 대 를 스 캔 하여 0,1 대 와 2 대 를 함께 스 캔 한다.(700,10,10)은 10 회 0 대가 1 회 1 세대,10 회 1 세대 가 1 회 2 세대 에 맞 춘 다 는 뜻 이다.
고립 된 참조 링
원래 두 표 의 대상 은 서로 인용 한 후 인용 을 삭제 하지만 대상 인용 계수 부위 0 은 회수 되 지 않 습 니 다.
python 은 대상 마다 인용 계 수 를 복사 하고 대상 i 에 대해 모든 대상 i 가 인용 한 대상 j 를 옮 겨 다 니 며 gcref_j 빼 기 1.
더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.