回覆列表
  • 1 # 陳鴻傑c

    以下摘自網路:物件引用計數器機制回收:php 5.3之前使用的垃圾回收機制是單純的“引用計數”,也就是每個記憶體物件都分配一個計數器,當記憶體物件被變數引用時,計數器+1;當變數引用撤掉後,計數器-1;當計數器=0時,表明記憶體物件沒有被使用,該記憶體物件則進行銷燬,垃圾回收完成。“引用計數”存在問題,就是當兩個或多個物件互相引用形成環狀後,記憶體物件的計數器則不會消減為0;這時候,這一組記憶體物件已經沒用了,但是不能回收,從而導致記憶體洩露。php5.3開始,使用了新的垃圾回收機制,在引用計數基礎上,實現了一種複雜的演算法,來檢測記憶體物件中引用環的存在,以避免記憶體洩露。示例程式碼:class A{private $b;function __construct(){$this->b = new B($this);}function __destruct(){//echo "A destruct\n";}function out(){echo "oooo","\n";}}class B{private $a;function __construct($a){$this->a = $a;}function __destruct(){//echo "B descturct\n";}}for($i=0;;$i++){$a = new A();if($i00 == 0){echo memory_get_usage()."\n";}}引起計數器+1的操作:$a=new A();$b=&$a;引起計數器-1的操作:unset($a);引起計數器值0物件並釋放記憶體:$a=null;記憶體相關的函式:memory_get_usage()返回當前分配給你的 PHP 指令碼的記憶體量,單位是位元組(byte)memory_get_peak_usage()返回分配給 PHP 記憶體的峰值mysql_free_result() 手動釋放mysql結果集記憶體gc_enable();//開啟gc自動回收gc_collect_cycles();//執行一次回收週期gc_disable();//關閉gc自動回收週期xdebug_debug_zval(變數名)//載入完xdebug後,可以用這個函式檢視變數的狀態請採納!

  • 中秋節和大豐收的關聯?
  • 滿洲八大姓中到底有的是“赫舍里氏”還是“齊佳氏”?