>  기사  >  백엔드 개발  >  PHP 메모리 릴리스 및 가비지 수집에 대한 자세한 설명

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

php中世界最好的语言
php中世界最好的语言원래의
2018-05-17 13:44:541654검색

이번에는 PHP 메모리 릴리스 및 가비지 컬렉션 사용에 대한 자세한 설명을 가져왔습니다. PHP 메모리 릴리스 및 가비지 컬렉션의 주의사항은 무엇인가요?

ReferenceAssignment

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

위 코드에서는 stringvariablea에 할당한 다음 a의 참조를 변수 b에 할당합니다. 분명히 이 시점을 가리키는 메모리는 다음과 같아야 합니다:

$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 템플릿 메소드 패턴 사용에 대한 자세한 설명

thinkPHP 프레임워크 자동 채우기 원리 및 사용법 자세한 설명

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

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