>백엔드 개발 >PHP 튜토리얼 >PHP 내장 가비지 수집

PHP 내장 가비지 수집

php中世界最好的语言
php中世界最好的语言원래의
2018-03-24 11:55:121507검색

이번에는 PHP 내장 가비지 컬렉션에 대해 소개하겠습니다. PHP 내장 가비지 컬렉션의 주의사항은 무엇인가요? 다음은 실제 사례입니다. 1. 각 변수가 정의되면 zval이라는 컨테이너에 저장됩니다. 여기에는 수량의 유형과 값은 물론 refcount(변수의 수로 이해됨) 및 is_ref(변수의 개수로 이해됨)도 포함됩니다. 참조 변수) 2개의 추가 정보. 변수가 한 번 참조되면 참조 개수가 +1이 됩니다. 설정을 해제하면 값이 0이 될 때까지 1씩 감소하고 메모리에서 삭제됩니다. 변수 정의 미리 결정된 값은 변수를 선언할 때 PHP가 메모리 공간을 미리 점유하여 할당하기 때문에 매번 확장되지 않지만, 이 미리 점유된 공간을 초과하면 공간이 증가합니다. . 그러나 변수를 삭제해도 공간 용량은 즉시 사라지지 않습니다

3. 변수 참조만으로는 메모리 사용량이 증가하지 않고 zval

구조

를 가리키게 됩니다. refcount+1

4. 간단히 설명하자면, PHP 변수는 Symbol_table 기호 테이블의 내부 구현에 의존하며 기호 테이블의 기본 구현은 HashTable이며 이는

PHP 배열

의 기본 구현과 일치합니다. global을 사용하여 전역 변수를 표시하고 compact와 같은 함수를 사용하여 현재 기호 테이블에서 변수를 직접 가져올 수 있는 것은 실제로 기호 테이블이 존재하기 때문입니다. 질문에서 언급한 대로 unset($a)이 공간을 즉시 해제하는지에 대해 이야기해 보겠습니다. 대답은 '아니오'입니다. Unset은 기호 테이블에서 a라는 요소를 삭제하는 것을 지원합니다(공간을 확보하는 대신 이 공간을 표시하고 사용 가능). ). 루프에서 $key를 반복적으로 업데이트하는 상황에 대해 이야기해 보겠습니다. 동일한 이름의 변수가 업데이트되므로 심볼 테이블에서 동일한 요소가 업데이트되며, 값이 업데이트됩니다. 이전 요소는 즉시 덮어쓰여집니다.

새로운 변수를 선언하면 메모리가 늘어나는 문제에 대해 이야기해 보겠습니다. 답은 불확실합니다. 이는 HashTable을 기반으로 구현된 심볼 테이블의 특성 때문입니다. HashTable은 요소 추가 시 한 요소에 대한 메모리를 적용하지 않고, 동시에 여러 요소에 대한 메모리를 적용합니다. (HashTable을 사용하는 경우에는 이 위치 표시만 사용하지 않습니다.) 채워지면 여러 요소에 대한 새 메모리를 적용합니다. 즉, 변수를 선언하거나 할당할 때 해당 변수가 기호 테이블에 없으면 PHP는 이를 기호 테이블에 추가합니다. 이때 기호 테이블이 가득 차지 않으면 적용되었지만 사용되지 않은 기호를 사용합니다. 메모리, 심볼 테이블이 가득 차면 새 메모리가 저장에 적용되며 새 메모리는 이 변수에 필요한 메모리만큼 작을 뿐만 아니라

에서 사례를 읽은 후 방법을 마스터했다고 믿습니다. 이 기사가 더 흥미진진합니다. PHP 중국어 웹사이트의 다른 관련 기사도 주목해주세요!

추천 도서:

Mysqld_multi 배포 독립 실행형 자세한 설명

mysql 서비스 설치가 시작되지 못한 이유

AngularJS를 사용하여 프런트 엔드 인터페이스에서 비밀번호 얻기

위 내용은 PHP 내장 가비지 수집의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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