1、先看正常的内存回收代码,当变量被unset之后内存就会回收
<?php $a = range(0, 99999); var_dump(memory_get_usage(true) / 1024 / 1024); unset($a); var_dump(memory_get_usage(true) / 1024 / 1024);
php5.6的结果
php7.4的结果
2、再看看递归引用导致的内存无法回收代码
<?php $a = range(0, 99999); var_dump(memory_get_usage(true) / 1024 / 1024); $a[] = &$a; unset($a); var_dump(memory_get_usage(true) / 1024 / 1024);
php5.6
php7.4
3、结论
1)、递归引用的内存无法回收
2)、php7版本对数组底层的hashtable进行了大优化,内存占用是php5.6的一半以下
参考:https://www.php.net/manual/zh/features.gc.refcounting-basics.php
来自anson博客
2021-02-14 22:52:22