|
導讀網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立... 網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。 本篇文章給大家帶來的內容是關于php中的引用以及垃圾回收的分析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。每個php變量存在一個叫"zval"的變量容器中。一個zval變量容器,除了包含變量的類型和值,還包括兩個字節的額外信息。第一個是"is_ref",是個bool值,用來標識這個變量是否是屬于引用集合(reference set)。通過這個字節,php引擎才能把普通變量和引用變量區分開來,由于php允許用戶通過使用&來使用自定義引用,zval變量容器中還有一個內部引用計數機制,來優化內存使用。第二個額外字節是"refcount",用以表示指向這個zval變量容器的變量(也稱符號即symbol)個數。所有的符號存在一個符號表中,其中每個符號都有作用域(scope),那些主腳本(比如:通過瀏覽器請求的的腳本)和每個函數或者方法也都有作用域。 //php中對象為引用傳遞 is_ref = 0, refcount = 0 zval容器會在腳本執行結束時被銷毀 引用官方的例子 <?php $a = array( 'one' ); $a[] =& $a; xdebug_debug_zval( 'a' ); a: (refcount=2, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=2, is_ref=1)=... )
執行unset$a 會釋放變量與zval的內存關聯 但是閉環自己內部仍存在 (refcount=1, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=1, is_ref=1)=... )
但是此時 沒有變量 能操作到 zval 容器 時間上此時 已經成為了內存垃圾 確無法釋放 回收機制:簡單來說 就是執行完腳本后 對仍存在的變量 進行 整體數據全部refcount -1 如果減為0 則判定為垃圾 進行內存容器銷毀 相關推薦: PHP的垃圾回收機制 可回收垃圾有哪些 垃圾回收 不可回收垃 以上就是php中的引用以及垃圾回收的分析的詳細內容,更多請關注php中文網其它相關文章! 網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。 |
溫馨提示:喜歡本站的話,請收藏一下本站!