php5.3之前的版本 , 只有參考計數 , 如果遇到回圈參考的情況 , 會出現記憶體泄露
比如這樣的代碼:
<?php
$arr=array("tao");
$arr[]=$a;
unset($arr)
雖然unset了$arr , 但是記憶體并不能回收 , 因為有參考自身這樣的行為
php5.3 之后的版本 , 有參考計數和同步周期回收演算法
在參考計數的基礎上 , 增加了同步回收 , 把計數減-1 大于0的變數 , 塞入了root buffer這樣的根緩沖池 , 滿10000后 , 對池里的變數進行回收操作 , 解決了上面的回圈參考問題
php7之后的版本 , 優化了參考計數部分
簡單型別:bool(true/false), null, long,double ,值直接存盤在zval中 , 沒有參考計數
內部增加了一個參考型別 , 變數為物件型別 , 資源型別 , 參考型別時 , 會使用參考計數
字串型別 , 區分臨時字串 , 內部字串 , 已知字串 , 內部字串和已知字串,都會存在于php運行的整個周期,不涉及垃圾回收問題 , 沒有參考計數 , 臨時字串有參考計數

陣列分為不可變陣列和可變陣列 ; 不可變陣列參考計數初始為2 , 往后會+1 ; 可變陣列初始為1 , 往后會+1
不可變陣列:
元素是不可變元素的就是不可變陣列 , 比如string, integer, float等
$arr=['tao','shihan']
可變陣列:
1. 動態生成陣列
2. 對不可變陣列做任何改變(增減元素,改變元素值)
$arr=range(1,2)
$a = ['y', 'x']; $a[0]='tao' //改變元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278347.html
標籤:PHP
