Python 메모리 관리 실례 분석

이 글 의 실례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기