天天看點

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()會在緩沖區還沒有滿的時候,強制執行垃圾回收算法