1. 程式人生 > >PHP垃圾回收週期--學習筆記

PHP垃圾回收週期--學習筆記

PHP垃圾回收週期

  前言

  1,當變數容器的引用計數增加時,該變數就不會是垃圾

  2.引用計數為0時,變數容器被刪除

  3.引用計數非0時,才會觸發垃圾回收週期,在一個回收週期中,檢查引用技術是否減1和那些變數容器的引用次數是0,來發現那些部分是垃圾

  回收週期

  1.垃圾回收演算法將所有可能的垃圾放在根緩衝區,根緩衝區滿了時,才會對緩衝區內部所有不同的變數容器執行垃圾回收操作

  2.演算法執行模擬刪除(有可能會讓引用計數減1,導致模擬刪除),模擬恢復(當引用計數真的不為0時,執行模擬刪除的逆運算),真的刪除(引用計數為0)步驟

  PHP整合

  1.php.ini 預設開啟垃圾回收機制,zend.enable_gc

配置項

  2.根空間可存10000個可能根,垃圾回收機制開啟,根快取區存滿時,就執行垃圾回收演算法.10000的空間大小可以在PHP原始碼檔案Zend/zend_gc.c配置GC_ROOT_BUFFER_MAX_ENTRIES,重新編譯php,修改該配置.垃圾回收機制關閉時,迴圈演算法永不執行

  3,可能根的儲存不論垃圾回收機制是否開啟,如果垃圾回收機制關閉,根緩衝區存滿了可能根,更多的可能根就不會被記錄.如果出現迴圈呼叫的情況,就會發生記憶體洩漏

  4.gc_enable(),開啟垃圾回收機制,gc_disable(),關閉垃圾回收機制;gc_collect_cycles()會在緩衝區還沒有滿的時候,強制執行垃圾回收演算法