PHP5.2 與 PHP5.3 垃圾回收算法之間的比較

PHP的底層代碼是由C/C++語言來編寫的,PHP的內存管理器的架構以下:php

存儲層(storage)

這一層是內存申請,ZendMM向系統進行的內存申請,並非有須要時向系統即時申請,而是由Z恩典MM的最底層(heap層)先向系統申請一大塊的內存,經過對上面三種列表的填充,創建一個相似於內存池的管理機制。在程序再須要使用內存的時候,ZendMM會在內存池中分配相應的內存供使用。這樣作的好處是避免了PHP向系統頻繁的內存操做。程序員

堆層(heap)

這一層是初始化內存,PHP內存管理主要維護三個列表:算法

1)、小塊內存列表free_buckets架構

2)、大塊內存列表large_free_bucketside

3)、剩餘內存列表rest_buckets性能

接口層

就是一些宏定義,主要是咱們本身編寫的一些應用程序spa

 

內存的銷燬

ZendMM在內存銷燬的處理上採用與內存申請相同的策略,當程序unset一個變量或者是其餘的釋放行爲時,ZendMM並不會直接馬上將內存交回給系統,而是隻在自身維護的內存池中將其從新標識爲可用,按照內存的大小整理到上面所說的三種列表(small、large、free)之中,已被下次內存申請時使用。.net

程序使用的全部內存,將在進程結束時統一交還給系統。線程

=================================================================rest

垃圾回收

自動回收內存的過程叫垃圾收集。PHP提供了語言層的垃圾回收機制,讓程序員沒必要過度關心程序內存分配。

PHP5.3以前

引用計數方式的內存動態管理

PHP中全部的變量都是zval變量的形式存在。

變量引用計數變爲0時,PHP將在內存中銷燬這個變量,而且PHP在一個生命週期結束後就會釋放此進程/線程所佔的內容

PHP5.3以後的垃圾回收

垃圾收集機制基於PHP的動態內存管理而存在。PHP5.3以後爲引入垃圾收集機制,在變量存儲的基本結構上有一些變更

它使用的是一種同步回收的算法。

在PHP官方文檔中咱們能夠清楚瞭解到兩種算法之間性能的比較:

http://docs.php.net/manual/zh/features.gc.performance-considerations.php

===================================================================

相關文章
相關標籤/搜索