1.引用计数
对于循环引用,unset后应用计数2-1>0,放入垃圾回收器。计数达到10000开始垃圾回收。
垃圾回收:
// $i >10000 时内存回收
$a = [];
for($i = 0; $i < 10000; $i++) {
$a["a_".$i] = [];
$a["a_".$i][] = [&$a["a_".$i], time()];
// unset($a["a_".$i]);
}
var_dump(memory_get_usage()); // 9041552 i为10001 9042360
unset($a);
var_dump(memory_get_usage()); // 8131672 i为10001 372448
内存释放:
// 内存随时回收
for ($i=0;$i<10000;$i++){
$a[] = [$i,time()];
}
var_dump(memory_get_usage()); // 4659352 i为10001 4659728
unset($a);
var_dump(memory_get_usage()); // 370912 i为10001 370912
2.三色标记(四色)
看到了一篇解释很不错的文章:https://blog.csdn.net/u011957758/article/details/76864400