[소개] PHP 가비지 수집 메커니즘은 php5 이후에만 사용할 수 있습니다. 이제 모든 학생들에게 도움이 되기를 바랍니다. PHP 5와 3 이전에 사용된 가비지 수집 메커니즘은 간단한 참조 카운트, 즉 각 메모리 객체에 카운트가 할당되었습니다.
PHP 가비지 수집 메커니즘은 php5 이후에만 나온 것입니다. 모든 학생들에게 도움이 되기를 바랍니다.
PHP 5.3 이전에 사용된 가비지 수집 메커니즘은 간단한 "참조 계산"입니다. 즉, 각 메모리 객체에 카운터가 할당됩니다. 변수 참조가 제거되고 카운터가 -1이 됩니다. 카운터 = 0이면 메모리 개체가 사용되지 않고 메모리 개체가 삭제되며 가비지 수집이 완료되었음을 나타냅니다.
"참조 카운팅"에 문제가 있습니다. 즉, 두 개 이상의 개체가 서로 참조하여 링을 형성하는 경우 이때 메모리 개체의 카운터가 0으로 줄어들지 않습니다. 이 메모리 개체 그룹은 더 이상 유용하지 않지만 재활용할 수 없으므로 메모리 누수가 발생합니다.
php5.3부터 참조 계산을 기반으로 하는 새로운 가비지 수집 메커니즘이 사용됩니다. 메모리 누수를 방지하기 위한 링의 존재를 감지합니다.
이 알고리즘에 대해서는 이 짧은 요약의 주요 참고 자료인 다음 기사를 참조할 수 있습니다.): PHP5의 가비지 컬렉션 알고리즘(가비지 컬렉션)의 진화에 대한 간략한 논의
아래 예
예 1: gc.php
<?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a; echo $b ."n"; ?>
말할 필요도 없이 % php -f gc.php 출력 결과는 매우 명확합니다.
hy0kl% php -f gc.php I am test.
자, 다음:
예 2:
<?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a; $b = 'I will change?'; echo $a ."n"; echo $b ."n"; ?> 执行结果依然很明显: hy0kl% php -f gc.php I will change? I will change?
한 번 살펴보세요:
예 3:
<?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a; unset($a); echo $a ."n"; echo $b ."n"; ?>
생각해볼 필요가 있나요?
hy0kl% php -f gc.php Notice: Undefined variable: a in /usr/local/www/apache22/data/test/gc.php on line 8 I am test.
조금 헷갈리시나요?
다시 보세요:
예 4:
<?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a; unset($b); echo $a ."n"; echo $b ."n"; ?>
사실 예 3을 이해하시면 이겁니다. 예시 3과 동일합니다.
hy0kl% php -f gc.php I am test. Notice: Undefined variable: b in /usr/local/www/apache22/data/test/gc.php on line 9
보세요:
예시 5:
<?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a; $a = null;echo '$a = '. $a ."n"; echo '$b = '. $b ."n"; ?>
처음 느껴지는 치열함은 무엇인가요?
hy0kl% php -f gc.php $a = $b =
네, 이것이 출력 결과입니다. 맞습니다. 이미 PHP GC에 대해 깊이 이해하고 있는 PHP GC 사람들은 솔직히 이 코드를 처음 실행했을 때 이상하게 생각하지 않을 것입니다. PHP GC에 대한 더 깊은 이해는 다음과 같이 작동합니다.
예제 6:
<?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a; $b = null; echo '$a = '. $a ."n"; echo '$b = '. $b ."n"; ?>
위는 PHP 가비지 수집에 대한 이해입니다. 메커니즘에 대한 자세한 내용은 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요!