>  기사  >  백엔드 개발  >  PHP 가비지 수집 메커니즘 예제 소개

PHP 가비지 수집 메커니즘 예제 소개

尚
앞으로
2020-03-23 09:16:233389검색

PHP 가비지 수집 메커니즘 예제 소개

<?php
$a = "new string";
?>

위의 예에서 새 변수 a는 현재 범위에서 생성됩니다. 그리고 문자열 유형과 새 문자열 값의 변수 컨테이너가 생성됩니다. 추가 2바이트 정보에서는 사용자 정의 참조가 생성되지 않으므로 "is_ref"가 기본적으로 FALSE로 설정됩니다.

이 변수 ​​컨테이너를 사용하는 변수는 하나만 있기 때문에 "refcount"는 1로 설정됩니다. "refcount" 값이 1인 경우 "is_ref" 값은 항상 FALSE입니다. xdebug_debug_zval() 함수를 호출하여 "refcount"와 "is_ref"의 값을 표시할 수 있습니다.

예제 #2 zval 정보 표시

<?php
xdebug_debug_zval(&#39;a&#39;);
?>

위 루틴의 출력은 다음과 같습니다.

a: (refcount=1, is_ref=0)=&#39;new string&#39;

한 변수를 다른 변수에 할당하면 참조 수(refcount)가 늘어납니다.

예제 #3 zval의 참조 개수 늘리기

<?php
$a = "new string";
$b = $a;
xdebug_debug_zval( &#39;a&#39; );
?>

위 루틴은 다음을 출력합니다.

a: (refcount=2, is_ref=0)=&#39;new string&#39;

이때 동일한 변수 컨테이너가 변수 a 및 변수 b와 연결되어 있으므로 참조 수는 2입니다. PHP는 필요하지 않을 때 생성된 변수 컨테이너를 복사하지 않습니다.

"refcount"가 0이 되면 변수 컨테이너가 삭제됩니다. 변수 컨테이너와 연결된 변수가 해당 범위를 벗어나거나(예: 함수 실행 종료) 변수에 대해 unset() 함수가 호출되면 "refcount"가 삭제됩니다.

예제 #4 참조 횟수 감소

<?php
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( &#39;a&#39; );
unset( $b, $c );
xdebug_debug_zval( &#39;a&#39; );
?>

위 루틴은 다음을 출력합니다:

a: (refcount=3, is_ref=0)='new string'
a: (refcount=1, is_ref=0)=&#39;new string&#39;

이제 유형과 값을 포함하여 unset($a);을 실행하면 변수 컨테이너는 다음과 같이 됩니다. 메모리에서 삭제됩니다.

관련 권장 사항:

PHP 비디오 튜토리얼: https://www.php.cn/course/list/29/type/2.html

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

성명:
이 기사는 oschina.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제