PHP 메모리 관리에 대한 질문
给我你的怀抱
给我你的怀抱 2017-05-16 13:11:22
0
2
446

PHP의 메모리 사용량을 테스트하기 위해 파일을 작성했는데, 릴리스 후 변수가 차지하는 메모리가 배열과 객체에 따라 다른 것을 발견했습니다. 다음은 PHP 7.0 CLI에서 실행되는 코드입니다. 방법.

배열:

<?php
함수 변환($size){
    $unit=array('b','kb','mb','gb','tb','pb');
    echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
함수 a(){
    $a = [];
    for($i=0;$i<1000000;$i++){
        $a[$i] = $i;
    }
    변환(memory_get_usage(true));
}
변환(memory_get_usage(true));
// 2M
에이();
변환(memory_get_usage(true))
// 2M

출력:

<사전><코드>2M 34M 200만

객체:

<?php
함수 변환($size){
    $unit=array('b','kb','mb','gb','tb','pb');
    echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
함수 a(){
    $a = 새로운 표준클래스;
    for($i=0;$i<1000000;$i++){
        $a->$i = $i;
    }
    변환(memory_get_usage(true));
}
변환(memory_get_usage(true));
에이();
변환(memory_get_usage(true))

출력:

<사전><코드>2M 68M 32M
给我你的怀抱
给我你的怀抱

모든 응답(2)
世界只因有你

이 질문은 매우 복잡합니다. PHP의 가비지 수집 메커니즘에 관한 것입니다. 제가 이해한 내용을 여러분께 공유하겠습니다.
각 PHP 프로세스에는 실행 중에 PHP 데이터 구조에 대한 모든 참조가 이 버퍼에 저장됩니다. 버퍼의 상한선(보통 10,000)에 도달하면 PHP가 가비지 수집 메커니즘을 시작합니다. 잘못된 리소스를 정리합니다.
루프 수를 5000으로 변경하면 가비지 수집이 실행되지 않습니다. 마지막 두 번의 메모리 값은 동일해야 합니다.

过去多啦不再A梦

기사를 읽었는데 도움이 되었으면 좋겠습니다

쓰레기 수집

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿