免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

PHP中的垃圾回收機制是什么

這篇文章主要講解了“PHP中的垃圾回收機制是什么”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP中的垃圾回收機制是什么”吧!

10年的鐘樓網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整鐘樓建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“鐘樓網(wǎng)站設計”,“鐘樓網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

相信只要入門學習過一點開發(fā)的同學都知道,不管任何編程語言,一個變量都會保存在內(nèi)存中。其實,我們這些開發(fā)者就是在來回不停地操縱內(nèi)存,相應地,我們?nèi)绻恢痹黾有碌淖兞浚瑑?nèi)存就會一直增加,如果沒有一個好的機制,那么內(nèi)存就會無限制地增加最終撐滿所有的內(nèi)存。這就造成了內(nèi)存泄露。但在日常開發(fā)中,除非一次加載一個很大的文件,我們幾乎見不到內(nèi)存超限的錯誤,這就是垃圾回收機制的作用。

垃圾回收是什么東西?

在使用 C 語言的時候,我們都要手動使用 free 來釋放內(nèi)存,在 C 之后的大部分編程語言都會自帶一個垃圾回收之類的處理能力,也就是我們今天要說的垃圾回收機制,也稱為 GC 。在有 GC 能力的開發(fā)語言中,我們不需要去關心什么時候釋放內(nèi)存,甚至我們完全不需要去了解這一塊的內(nèi)容,因為這些語言在底層已經(jīng)幫我們處理好了關于內(nèi)存釋放的問題。

當然這方面的內(nèi)容最出名的就是 Java 中的垃圾回收機制,其實 PHP 也有相應的處理機制,當然,很多 PHPer 可能從來沒接觸過,今天我們就來探討一下這方面的內(nèi)容。

PHP 的垃圾回收算法

在之前的文章中,我們有介紹過引用計數(shù)的概念。在 PHP5.3 之前,PHP 的垃圾回收機制非常簡單,就是把 refcount 為0的全部清理回收掉,在底層也就是 free 掉了。但是這種方式會帶來一個問題,也就是我們在引用計數(shù)這篇文章中說過的循環(huán)引用,這種引用問題通過普通的判斷 refcount 的方式是無法回收的。所以在 PHP5.3 之前,循環(huán)引用是會造成內(nèi)存泄露的。

之所以強調(diào)版本,那是因為在 5.3 之后,PHP 改進了垃圾回收的算法,使這種循環(huán)引用得到了解決。(當然,我們在日常開發(fā)中盡量要避免這種循環(huán)引用的問題)。具體算法我們引用官方的圖片:

PHP中的垃圾回收機制是什么

在官方文檔中有詳盡的解釋,不過還是會看得很懵逼。我們就用簡單的語言(說人話)來描述這個過程。

首先,我們有個根緩沖區(qū)的概念,就是圖中的 root 。在底層通過一系列看不懂搞不明白的算法我們能找到每個變量的一個可能根。PHP 會將變量的可能根放入根緩沖區(qū)。

當根緩沖區(qū)滿了的時候,一般這個默認值是10000,需要修改源碼重新編譯才能修改這個值。PHP 就會啟動垃圾回收機制,從根緩沖區(qū)中按照深度遍歷的算法來查找所有的和這個可能根相關的變量,并將某一個可能根找到的變量的 refcount 減1,并做一個標記當前這個“已減”。

然后再次深度遍歷,如果 refcount 不是0的,就加1,如果是0的就保持不變。

接著清除根緩沖區(qū)中的所有可能根,清除而不是刪除。然后清理釋放所有的 refcount 為0的變量內(nèi)容。

是不是已經(jīng)懵逼了?其實我也很懵逼,都不知道這段是怎么寫下來的....

記住幾個要點就可以對付面試并秒殺大部分人了。

  • PHP5.3 后并不是直接看每個變量的 refcount 是否為0了

  • 使用的算法是深度遍歷,有個根緩沖區(qū),根據(jù)它來清理,具體算法需要比較扎實的 C 和算法基礎,學源碼的時候再好好研究吧

  • 5.3 之后和算法解決了循環(huán)引用的問題

  • 內(nèi)存泄露值會保持在某一個范圍,不會出現(xiàn)立即大范圍崩潰的情況

垃圾回收對性能的影響

前文說過,垃圾回收在根緩沖區(qū)滿了之后會馬上執(zhí)行。其中也會進行兩次的深度遍歷,這就不可避免的帶來了性能的消耗。畢竟算法的執(zhí)行都是需要耗時的。不過相對于內(nèi)存溢出這種毀滅性的錯誤來說,垃圾回收帶來的性能損耗基本上是可以忽略不計的。

總結

垃圾回收的內(nèi)容其實我們只需要記住幾個關鍵點就可以了,具體的核心算法和內(nèi)容是需要在更深入的研究源碼后才能完全了解的,當然,這也是我們學習的目標,之后也一定會涉獵源碼底層的相關內(nèi)容,就讓我們拭目以待吧!

感謝各位的閱讀,以上就是“PHP中的垃圾回收機制是什么”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對PHP中的垃圾回收機制是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!

網(wǎng)站名稱:PHP中的垃圾回收機制是什么
URL鏈接:http://newbst.com/article28/jhspcp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名小程序開發(fā)網(wǎng)站建設定制開發(fā)營銷型網(wǎng)站建設自適應網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司