垃圾回收機制是一種動態儲存分配方案。它會自動釋放程式不再需要的已分配的記憶體區塊。 自動回收記憶體的過程叫垃圾收集。 垃圾回收機制可以讓程式設計師不必過度關心程式記憶體分配,從而將更多的精力投入到業務邏輯。
PHP也在語言層實現了記憶體的動態管理,這在前面的章節中已經有了詳細的說明, 記憶體的動態管理將開發人員從繁瑣的記憶體管理中解救出來。與此配套,PHP也提供了語言層的垃圾回收機制, 讓程式設計師不必過度關心程式記憶體分配。
在PHP5.3版本之前,PHP只有簡單的基於引用計數的垃圾回收,當一個變數的引用當計數變成0時, PHP會在記憶體中銷毀這個變量,但這裡的垃圾並不能稱之為垃圾。 而PHP在一個生命週期結束後就會釋放此進程/執行緒所佔的內容,這種方式決定了PHP在前期不需要過多考慮記憶體的洩漏問題。 但隨著PHP的發展,PHP開發者的增加以及所承載的業務範圍的擴大。
在PHP5.3中引入了更完善的垃圾回收機制。 新的垃圾回收機制解決了無法處理循環的引用記憶體洩漏問題。下邊,我們將配合實例測試數據,探討新的垃圾回收機制。
#(tips: refcount和zval是什麼?
每個變數在PHP底層都是一個zval的結構體中保存,相同值得變數共用一個值,用refcount來保存指向這個值得變數個數,
#例如$a =$b=1,則他們指向一個zval,值為1,refount=2 ,表示有兩個變數指向了它,詳細了解見PHP內核的儲存機制(分離/改變))
阿
##下邊是實際資料的一個測試,結論在右下角:
如何避免記憶體外洩:
1. 寫高品質程式碼,減少記憶體洩漏的可能
2.根據PHP生命週期回收,讓系統自動回收記憶體(對於非常駐行程式有效,RINIT ,RSHOTDOWN)
3.手動回收,即重啟伺服器nginx或apache (MINIT ,MSHOTDOWN)
4.調高php.ini設定檔: php.ini memory_limit = 128M(不推薦)
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 38218371 bytes) bytes exhausted (tried #738218371 bytes)by#1281MB =78121MB = 12121MB = 12121MB
以上是PHP核心-記憶體洩漏與新垃圾回收機制的圖文介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!