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