서버 메모리 관리 메커니즘
서버 시작 후 메모리 관리의 기본 원리는 일반 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!