参考原文 http://www.nowamagic.net/librarys/veda/detail/1377
采用的是引用计数(php5.3之后做了优化):
每个内存对象都分配一个计数器,当变量引用的时候 则计数器+1,引用撤掉的时候则是 -1,为0的时候 内存对象销毁,垃圾回收.
这个有个环路的问题 a对象引用了对象b b 对象引用对象a 这个怎么都回收不了的
class A{ private $b; function __construct(){ $this->b = new B($this); } function __destruct(){ //echo "A destruct\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"; } }
其他的影响:
a. & 计数器+1
b. unset 计数器-1
c.
=null
$a = new Auth()
$b = new Auth()
$a=null 则将 Auth 置空 计数器为0
d.
脚本执行结束 则释放脚本内所有的内存空间