찾다

 >  Q&A  >  본문

PHP 메모리 관리에 대한 질문

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
给我你的怀抱给我你的怀抱2808일 전461

모든 응답(2)나는 대답할 것이다

  • 世界只因有你

    世界只因有你2017-05-16 13:13:22

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

    회신하다
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:13:22

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

    쓰레기 수집

    회신하다
    0
  • 취소회신하다