>  기사  >  위챗 애플릿  >  PHP 메모리 릴리스 및 가비지 수집에 대한 자세한 설명

PHP 메모리 릴리스 및 가비지 수집에 대한 자세한 설명

小云云
小云云원래의
2018-03-30 10:00:002362검색

이 기사는 주로 PHP로 프로그램을 작성하는 방법과 메모리 릴리스 및 가비지 수집과 관련된 문제를 공유합니다. 관심 있는 친구들이 이 글을 통해 모두에게 도움이 되기를 바랍니다.

참조 할당


$a = 'apple';
$b = &$a;

위 코드에서는 변수 a에 문자열을 할당한 다음 변수 b에 a의 참조를 할당했습니다. 분명히 이때를 가리키는 메모리는 다음과 같아야 합니다.


$a -> &#39;apple&#39; <- $b

a와 b는 동일한 메모리 영역을 가리킵니다. var_dump($a, $b를 통해 string(5) "apple" string(5)을 얻습니다. ) "apple" , 이는 우리가 예상한 것입니다.

unset function

문자열 'apple'을 메모리에서 해제하고 싶다고 가정해 보겠습니다.


unset($a);

그러나 $a $b 두 변수의 정보를 다시 인쇄하여 다음 결과를 얻었습니다. 주의 사항: 정의되지 않은 변수: a 및 string(5) "apple" . 이상하게도 $a와 $b는 모두 메모리 영역을 가리키고 있으며 $a는 분명히 해제되었습니다. 왜 $b는 여전히 'apple'입니까?

실제로는 이렇습니다. Unset()은 변수 포인터를 파괴하고 해당 메모리 영역에 저장된 문자열을 해제하지 않습니다. 따라서 작업이 완료된 후 메모리 포인터는 다음과 같이 됩니다.


&#39;apple&#39; <- $b

중요 기억해야 할 점: unset()은 변수가 가리키는 메모리를 해제하지 않고 변수 포인터만 파괴합니다. 동시에 해당 메모리 조각의 참조 횟수를 1씩 줄입니다. 참조 횟수가 0이면, 즉 해당 메모리 조각이 어떤 변수에서도 참조되지 않으면 PHP의 가비지 수집이 트리거됩니다.

직접 재활용

그럼 '사과'가 차지한 메모리를 실제로 해제하려면 어떻게 해야 할까요?

위의 방법을 사용하면 설정을 해제($a)한 다음 설정을 해제($b)하여 메모리 영역의 모든 참조를 삭제할 수 있습니다. 참조 횟수가 0으로 줄어들면 PHP에서 자연스럽게 재활용됩니다.

물론 더 직접적인 방법도 있습니다:


$a = null;

null에 직접 할당하면 $a가 가리키는 메모리 영역이 비워지고 참조 카운트가 0으로 재설정되며 메모리가 해제됩니다.

스크립트 실행 종료

php는 스크립트 실행이 끝나면 스크립트에 사용된 모든 메모리가 해제되는 스크립트 언어입니다.

관련 권장 사항:

PHP 가비지 수집 메커니즘 마스터하기

PHP에 내장된 가비지 수집

PHP의 가비지 수집 메커니즘에 대한 자세한 설명


위 내용은 PHP 메모리 릴리스 및 가비지 수집에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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