什么软件做网站好,自微网站首页,网上互联网推广,申通物流的网站建设使用的是“引用计数”方式进行回收。简单地理解的话#xff0c;就是每个分配的内存区域都有一个计数器#xff0c;记录有多少个变量指针指向这片内存。当指向该片内存的指针数量为0#xff0c;那么该片内存区域就可以被回收。 引用计数计数简单#xff0c;强大#xff0c;…使用的是“引用计数”方式进行回收。简单地理解的话就是每个分配的内存区域都有一个计数器记录有多少个变量指针指向这片内存。当指向该片内存的指针数量为0那么该片内存区域就可以被回收。 引用计数计数简单强大但是有一个致命的缺陷就是环状引用。考虑以下的代码 Php代码 $a array(); $a[] $a; unset($a); 变量$a引用了自己形成了一个环。$a被unset了可是由于存在环状引用因此$a之前指向的内存的引用计数为1因此该内存区域不会被垃圾回收机制回收。 PHP5.3针对这个重大的缺陷做了优化。虽然其基础仍然是引用计数但是在做了一些改良能够将环状引用导致的内存泄露控制在一定的规模以内。当然这并不是说你可以随便滥用内存编写代码时仍然要小心为上 其他要点1.PHP脚本运行完毕该脚本申请的所有内存空间都会释放不管是否存在环状引用。因此环状引用内存泄露的问题一般只影响长时间运行的程序脚本。 2.垃圾回收机制需要满足一定的条件才会执行。因此unset后系统并不一定会立即回收垃圾。 3.unset的作用。“unset只是断开一个变量到一块内存区域的连接同时将该内存区域的引用计数-1”。也就是说如果有一个以上的变量指向同一个内存区域或者存在环状引用那么unset不会使内存区域释放。断开也说明unset并不会直接删除内存区域而只是改变其引用计数而已。 4.$xxnull的作用。“$a null 是直接将$a 指向的数据结构置空同时将其引用计数归0”。根据我对这个定义的理解null操作可以立即释放掉内存空间因此很多PHP技巧中不厌其烦地对我们说先将变量设为null再unset。理解其深层原理后我才彻底理解了这样做的原因null才是王道转载于:https://www.cnblogs.com/zhangyuhang3/p/6873619.html