>  기사  >  PHP 프레임워크  >  스울 메모리는 점점 더 커질까요?

스울 메모리는 점점 더 커질까요?

(*-*)浩
(*-*)浩원래의
2019-12-12 11:45:593710검색

스울 메모리는 점점 더 커질까요?

서버 메모리 관리 메커니즘

서버 시작 후 메모리 관리의 기본 원리는 일반 php-cli 프로그램과 동일합니다. 자세한 내용은 Zend VM 메모리 관리 문서를 참조하세요.

지역 변수 학习 (추천 학습:

SWOOLE 동영상 튜토리얼 ) 이벤트 콜백 함수가 반환된 후 모든 지역 개체와 변수가 복구되며 UNSET이 필요하지 않습니다. 변수가 리소스 유형인 경우 해당 리소스도 PHP의 하위 계층에서 해제됩니다.

function test()
{
    $a = new Object;
    $b = fopen('/data/t.log', 'r+');
    $c = new swoole_client(SWOOLE_SYNC);
    $d = new swoole_client(SWOOLE_SYNC);
    global $e;
    $e['client'] = $d;
}

$a, $b, $c는 모두 로컬 변수입니다. 이 함수가 반환되면 이 세 변수는 즉시 해제되고 해당 메모리도 즉시 해제되며 열린 IO 리소스 파일 핸들이 즉시 닫힙니다.

$d 역시 로컬 변수인데 리턴 전 글로벌 변수 $e에 저장되므로 해제되지 않습니다. unset($e['client'])가 실행되고 $d 변수를 참조하는 다른 PHP 변수가 없으면 $d가 해제됩니다.

전역 변수

PHP에는 3가지 유형의 전역 변수가 있습니다.

전역 키워드를 사용하여 선언된 변수

정적 키워드를 사용하여 선언된 클래스 정적 변수 및 함수 정적 변수

$_GET, $_POST, $GLOBALS 등을 포함한 PHP의 슈퍼 전역 변수

전역 변수 및 객체, 클래스 정적 변수, 서버 개체에 저장된 변수는 해제되지 않습니다. 프로그래머는 이러한 변수와 개체 자체의 소멸을 처리해야 합니다.

class Test
{
    static $array = array();
    static $string = '';
}
function onReceive($serv, $fd, $reactorId, $data)
{
    Test::$array[] = $fd;
    Test::$string .= $data;
}

이벤트 콜백 함수에서 로컬이 아닌 변수의 배열 유형 값에 특별한 주의가 필요합니다. TestClass::$array[] = "string"과 같은 특정 작업은 심각한 경우 메모리 누수를 일으킬 수 있습니다. 폭발이 발생할 수 있습니다. 필요한 경우 큰 배열을 정리할 때 주의해야 합니다.

이벤트 콜백 함수에서는 TestClass::$string .= $data 등 로컬 변수가 아닌 문자열을 연결할 때 메모리 누수에 주의해야 하며, 심한 경우 메모리 폭발이 발생할 수 있습니다. 발생하다.

위 내용은 스울 메모리는 점점 더 커질까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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