每一種
網站推廣計算機語言都有本身的自動垃圾回收機制,讓程序員沒必要過度關心程序內存分配,php也不例外,可是在面向對象編程(OOP)編程中,有些對象須要顯式的銷燬;防止程序執行內存溢出。
1、PHP 垃圾回收機制(Garbage Collector 簡稱GC)
在PHP中,沒有任何變量指向這個對象時,這個對象就成爲垃圾。PHP會將其在內存中銷燬;這是PHP的GC垃圾處理機制,防止內存溢出。
當一個PHP線程結束時,當前佔用的全部內存空間都會被銷燬,當前程序中全部對象同時被銷燬。GC進程通常都跟着每起一個SESSION而開始運行的.gc目的是爲了在session文件過時之後自動銷燬刪除這些文件.
2、__destruct /unset
__destruct() 析構函數,是在垃圾對象被回收時執行。
unset 銷燬的是指向對象的變量,而不是這個對象。
3、 Session 與 GC
由 於PHP的工做機制,它並無一個daemon線程來按期的掃描Session信息並判斷其是否失效,當一個有效的請求發生時,PHP 會根據全局變量 session.gc_probability和session.gc_divisor的值,來決定是否啓用一個GC, 在默認狀況下,session.gc_probability=1, session.gc_divisor =100也就是說有1%的可能性啓動GC(也就是說100個請求中只有一個gc會伴隨100箇中的某個請求而啓動).
GC的工做就是掃描全部的Session信息,用當前時間減去session最後修改的時間,同session.gc_maxlifetime參數進行比較,若是生存時間超過gc_maxlifetime(默認24分鐘),就將該session刪除。
可是,若是你Web服務器有多個站點,多個站點時,GC處理session可能會出現意想不到的結果,緣由就是:GC在工做時,並不會區分不一樣站點的session.
那麼這個時候怎麼解決呢?
1. 修改session.save_path,或使用session_save_path()讓每一個站點的session保存到一個專用目錄,
2. 提供GC的啓動率,天然,GC的啓動率提升,系統的性能也會相應減低,不推薦。
3.
網站推廣在代碼中判斷當前session的生存時間,利用session_destroy()刪除. (fblww-0307)