>  기사  >  백엔드 개발  >  PHP 가비지 수집 메커니즘

PHP 가비지 수집 메커니즘

巴扎黑
巴扎黑원래의
2016-11-24 11:36:081261검색

모든 컴퓨터 언어에는 자체 자동 가비지 수집 메커니즘이 있으므로 프로그래머는 프로그램 메모리 할당에 대해 크게 걱정할 필요가 없으며 PHP도 예외는 아닙니다. 그러나 객체 지향 프로그래밍(OOP) 프로그래밍에서는 일부 개체가 필요합니다. 명시적으로 파괴됨 ; 프로그램 실행 메모리가 오버플로되는 것을 방지합니다.
1. PHP 가비지 컬렉터(GC)
PHP에서는 이 개체를 가리키는 변수가 없으면 개체가 가비지가 됩니다. PHP는 메모리에서 이를 파괴합니다. 이는 메모리 오버플로를 방지하기 위한 PHP의 GC 가비지 처리 메커니즘입니다.
PHP 스레드가 종료되면 현재 점유된 모든 메모리 공간이 소멸되고 동시에 현재 프로그램의 모든 개체가 소멸됩니다. GC 프로세스는 일반적으로 각 SESSION에서 실행되기 시작합니다. gc의 목적은 만료된 세션 파일을 자동으로 삭제하고 삭제하는 것입니다.

2. __destruct /unset
__destruct() 소멸자. 쓰레기 개체가 재활용됩니다.
unset은 객체가 아닌 객체를 가리키는 변수를 파괴합니다.

3. 세션 및 GC
PHP의 작동 메커니즘으로 인해 세션 정보를 정기적으로 검사하고 유효한 요청이 발생하면 PHP는 이를 수행하는 데몬 스레드가 없습니다. session.gc_probability 및 session.gc_divisor 변수의 값은 GC 활성화 여부를 결정합니다. 기본적으로 session.gc_probability=1, session.gc_divisor =100은 GC 시작 가능성이 1%라는 의미입니다(즉, 100 100개의 요청 중 하나의 GC만 시작됩니다.
GC의 작업은 모든 세션 정보를 스캔하고 현재 시간에서 세션의 마지막 수정 시간을 뺀 후 세션과 비교하는 것입니다. gc_maxlifetime 매개변수, 생존 시간이 gc_maxlifetime(기본값 24분)을 초과하면 세션이 삭제됩니다.
그러나 웹 서버에 여러 사이트가 있는 경우 여러 사이트의 세션을 처리할 때 GC가 예상치 못한 결과를 초래할 수 있습니다. 그 이유는 GC가 작동할 때 서로 다른 사이트의 세션을 구분하지 않기 때문입니다.

그렇다면 이때는 어떻게 해결해야 할까요?
1. session.save_path()를 사용하여 각 사이트의 세션을 전용 디렉터리에 저장합니다.
2. 당연히 GC 시작 속도가 향상되고 시스템이 향상됩니다. 성능도 그에 따라 감소하므로 권장되지 않습니다.
3. 코드에서 현재 세션의 생존 시간을 확인하고 session_destroy()를 사용하여 삭제합니다.

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