首頁  >  文章  >  後端開發  >  PHP之垃圾回收機制詳解

PHP之垃圾回收機制詳解

小云云
小云云原創
2018-03-13 13:02:372015瀏覽

1) PHP的垃圾回收週期是在引用計數減少到非零值時產生的。因此首先需要了解引用計數的知識。

2) 每個php變數存在一個叫"zval"的變數容器中。一個zval變數容器,除了包含變數的類型和值,還包括兩個位元組的額外資訊。第一個是"is_ref",是個bool值,用來識別這個變數是否是屬於引用集合(reference set)。

3) 第二個額外位元組是"refcount",用以表示指向這個zval變數容器的變數(也稱符號即symbol)個數。

5) 把一個變數賦值給另一個變數會增加引用次數(refcount)。當任何關聯到某個變數容器的變數離開它的作用域(例如:函數執行結束),或是對變數呼叫了函數 unset()時,”refcount「就會減1。

4) 測試程式碼範例:

$str = 'Hello World!';xdebug_debug_zval('str');$str1 = $str2 = $str;xdebug_debug_zval('str');unset($str1);xdebug_debug_zval('str');

以上範例輸出

str:(refcount=1, is_ref=0),string 'Hello World!' (length=12)str:(refcount=3, is_ref=0),string 'Hello World!' (length=12)str:(refcount=2, is_ref=0),string 'Hello World!' (length=12)

回收週期

1) 在引用計數減少到非零值時,才會產生垃圾週期(garbage cycle)。其次,在一個垃圾週期中,透過檢查引用計數是否減1,並且檢查哪些變數容器的引用次數是零,來發現哪一部分是垃圾。

2) PHP垃圾回收的演算法是模擬刪除、模擬恢復、真的刪除,每個動作都使用深搜遍歷。

3) PHP回收機制的配置:zend.enable_gc。也能透過分別呼叫gc_enable() 和 gc_disable()函數來開啟和關閉垃圾回收機制,在呼叫gc_disable()函數釋放記憶體之前,先呼叫gc_collect_cycles()函數可能比較明智。

4) 對效能影響的領域:第一個是記憶體佔用空間的節省,另一個是垃圾回收機制執行記憶體清理時的執行時間增加

5) 在PHP執行中,一旦根緩衝區滿了或呼叫gc_collect_cycles() 函數時,就會執行垃圾回收。

相關推薦:

什麼是PHP垃圾回收機制

#解析PHP5中的垃圾回收機制的演進

php中析構函數__destruct與垃圾回收機制解析

#

以上是PHP之垃圾回收機制詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn