누구든지이 간단한 질문에 대답 할 수 있는지 궁금합니다. 나는 그것을 검색해 보았지만 비슷한 질문을하지만 틀린 맥락에서 나온다. 함수가 끝난 후 $ test_array 어떻게됩니까PHP 함수 변수 및 가비지 컬렉터
function foo()
{
$test_array = array();
for($i=0; $i<10000000; $i++)
{
$test_array[] = $i;
}
}
: 나는 궁금 무엇
이 코드를 가지고있다. 나는 그것이 범위를 잃어 버린다는 것을 안다. 나는 프로그래밍에 익숙하지 않다.
나는 함수가 종료되거나 함수가 끝나는대로 PHP가 가비지 컬렉터에 삭제를 설정 않습니다 전에 내가
unset($test_array);
를 호출해야 무엇을 궁금?
저는 for 루프를 사용하여 요점을 파악하기에 적합한 크기의 변수를 보여줍니다. 가비지 수집을 받았습니다, 케빈
'memory_get_usage()'에 대한 내 자신의 테스트에서 (아마도 매우 특정 플랫폼에 특화되어 있으므로 소금 한알 가지고) - 변수를 명시 적으로 설정 해제하면 메모리가 즉시 해제됩니다. 변수 범위를 벗어나게하면 변수를 수집 할 수있는 플래그로 표시하지만 콜렉터 자체가 반드시 트리거되는 것은 아닙니다. – gregheo
unset()은 삭제하지 않고, 단지 삭제 플래그를 설정하고, unset() 또는 호출 루틴으로 돌아가서 가비지 수집을 트리거하지 않습니다. Coder가 말했듯이, CPU에 여유 시간이 있거나 PHP가 추가 메모리를 할당하려 할 때 필요가 충분하지 않을 때 발생합니다. –
내가 아는 한, unset은 가비지 콜렉터를 호출하지 않는다. –