이 기사에서는 PHP로 프로그램을 작성하는 방법과 메모리 릴리스 및 가비지 수집과 관련된 문제를 공유합니다. 관심 있는 친구들이 이 기사에서 배울 수 있습니다.
참조 할당
$a = 'apple'; $b = &$a;
위 코드에서는 변수 a에 문자열을 할당한 다음 변수 b에 a의 참조를 할당했습니다. 분명히 이 시점을 가리키는 메모리는 다음과 같아야 합니다:
$a -> 'apple' <- $b
a와 b는 동일한 메모리 영역을 가리킵니다. 우리는 string(5) "apple" string(5를 통해 var_dump($a, $b)을 얻습니다. ) ) "apple" , 이는 우리가 예상했던 것입니다.
unset function
문자열 'apple'을 메모리에서 해제하고 싶다고 가정해 보겠습니다.
unset($a);
그러나 $a $b 두 변수의 정보를 다시 인쇄하여 다음 결과를 얻었습니다. 주의 사항: 정의되지 않은 변수: a 및 string(5) "apple" . 이상하게도 $a와 $b는 모두 메모리 영역을 가리키고 있으며 $a는 분명히 해제되었습니다. 왜 $b는 여전히 'apple'입니까?
실제로는 다음과 같습니다. unset()은 변수 포인터를 파괴하고 해당 메모리 영역에 저장된 문자열을 해제하지 않습니다. 따라서 작업이 완료된 후 메모리 포인터는 다음과 같습니다.
'apple' <- $b
기억해야 할 중요한 점: unset()은 변수가 가리키는 메모리를 해제하지 않고 변수 포인터만 파괴합니다. 동시에 해당 메모리 조각의 참조 횟수를 1씩 줄입니다. 참조 횟수가 0이면, 즉 해당 메모리 조각이 어떤 변수에서도 참조되지 않으면 PHP의 가비지 수집이 트리거됩니다.
직접 재활용
그럼 '사과'가 차지한 메모리를 실제로 해제하려면 어떻게 해야 할까요?
위의 방법을 사용하면 설정을 해제($a)한 다음 설정을 해제($b)하여 메모리 영역의 모든 참조를 삭제할 수 있습니다. 참조 횟수가 0으로 줄어들면 PHP에서 자연스럽게 재활용됩니다.
물론 더 직접적인 방법도 있습니다:
$a = null;
null에 직접 할당하면 $a가 가리키는 메모리 영역이 비워지고 참조 카운트가 0으로 재설정되며 메모리가 해제됩니다.
스크립트 실행 종료
php는 스크립트 실행이 끝나면 스크립트에 사용된 모든 메모리가 해제되는 스크립트 언어입니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!
관련 권장사항:
PHP의 move_uploaded_file() 함수 분석에 대해
PHP 디버깅에서 var_export, print_r 및 var_dump의 차이점에 대해
위 내용은 PHP 메모리 릴리스 및 가비지 컬렉션 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!