>  기사  >  백엔드 개발  >  PHP 커널 - 메모리 누수 및 새로운 가비지 수집 메커니즘에 대한 그래픽 소개

PHP 커널 - 메모리 누수 및 새로운 가비지 수집 메커니즘에 대한 그래픽 소개

黄舟
黄舟원래의
2017-03-09 09:51:581990검색

가비지 수집 메커니즘은 동적 저장소 할당 체계입니다. 프로그램에 더 이상 필요하지 않은 할당된 메모리 블록을 자동으로 해제합니다. 자동으로 메모리를 회수하는 프로세스를 가비지 수집이라고 합니다. 가비지 수집 메커니즘을 사용하면 프로그래머는 프로그램 메모리 할당에 대해 너무 많이 걱정하지 않아도 되므로 비즈니스 로직에 더 많은 에너지를 쏟을 수 있습니다.

PHP는 이전 장에서 자세히 설명한 메모리의 동적 관리도 구현합니다. 구조하다. 이와 함께 PHP는 언어 계층에서 가비지 수집 메커니즘도 제공하므로 프로그래머는 프로그램 메모리 할당에 대해 너무 걱정할 필요가 없습니다.

PHP5.3 이전에는 PHP에는 변수 참조 시 단순 참조 계산 기반 가비지 수집만 있었습니다. count가 0이 되면 PHP는 메모리에서 이 변수를 파괴하지만 여기의 쓰레기는 쓰레기라고 부를 수 없습니다. 그리고 PHP는 수명 주기가 끝난 후 이 프로세스/스레드가 차지한 콘텐츠를 해제합니다. 이 방법은 PHP가 초기 단계에서 너무 많은 메모리 누수를 고려할 필요가 없음을 결정합니다. 그러나 PHP의 발전과 함께 PHP 개발자의 수가 늘어나고, PHP가 수행하는 사업 범위도 확대되었습니다.

PHP5.3에서는 더욱 완전한 가비지 수집 메커니즘이 도입되었습니다. 새로운 가비지 수집 메커니즘은 주기를 처리할 수 없는 참조 메모리 누수 문제를 해결합니다. 다음으로 예제 테스트 데이터를 통해 새로운 가비지 수집 메커니즘에 대해 논의하겠습니다.



(팁: refcount와 zval이 무엇인가요?

각 변수는 PHP 하단의 zval 구조에 저장됩니다. 동일한 값을 가진 변수는 값을 공유합니다.

예를 들어, $a =$b=1이면 값이 1이고 refount=2인 zval을 가리킵니다. 이는 이를 가리키는 두 개의 변수가 있음을 의미합니다. 자세한 내용은 PHP를 참조하세요. 커널 저장 메커니즘(분리/변경))

A

다음은 실제 데이터 A 테스트이며, 결론은 오른쪽 하단에 있습니다:




메모리 누수를 방지하는 방법:

1. 고품질 코드를 작성하면 메모리 누수 가능성이 줄어듭니다

2. PHP 수명 주기에 따라 재활용하고 시스템이 자동으로 재활용되도록 합니다. 메모리(비상주 프로그램인 경우 유효, RINIT, RSHOTDOWN)

3. 수동 재활용, 즉 서버 nginx 또는 Apache 다시 시작(MINIT,MSHOTDOWN)

4. php.ini 구성 파일을 늘립니다: php.ini memory_limit = 128M(권장하지 않음)

치명적인 오류: 허용되는 메모리 크기 134217728바이트 중 소진됨(38218371바이트 할당 시도) 128MB = 134217728바이트


위 내용은 PHP 커널 - 메모리 누수 및 새로운 가비지 수집 메커니즘에 대한 그래픽 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.