首页
学习
活动
专区
工具
TVP
发布

自己用的变量,请自己清理干净

码代码真的不是搬砖那么简单。一个变量虽然都能实现功能,但是不同的选择会有不同的影响。自己用的变量,请自己清理干净!php中的内存扩充是以两倍的方式扩充,同时在变量的发生改变才去改变引用。

数组变量。

创建一个空数组,对这个数组插入100个元素,然后再把这100个元素从数组中删除,php占用的内存有什么变化?

以上输出内容

可以看出,当数组的数据插入之后再弹出,并没有释放内存空间,只有当真正unset之后(或者重新赋值)才会释放掉。

在循环体中插入一下代码

输出内容:

可以看到,不是每次插入都会引起内存变化,因为php每次内存扩充都是以倍数的方式扩充。因此数组的使用不是那么随便。数组每个元素的占用内存大小,一个临界的点就可以导致内存翻倍。对于数组,循环前先置空,谁知道前面有没有人用这个名。不使用请主动清理。

对象变量,静态变量

对象变量,有其自身的生命周期。当对象变量析构,所占用的内存会被释放掉。对象内部都是随着对象本身的消亡而消亡。

输出内容

对象等号赋值,指向相同的引用地址,内存不会变化太多。clone这是创建一个全新的对象,占用内存如图new一个新对象一样。当对象unset或赋值空的时候,对象占用内存被释放。

在一些框架中,经常会看到一个静态对象更加特定的参数创建对象,看一下这种情况内存如何

输出内容:

因为静态变量TestMe中还有一份引用test对象,因此当test置为null的时候,内存并没减少,只有当将所有的对象引用释放,内存才能够释放。但是对于类静态属性,如果没有主动释放,只有当进程结束才会释放。

因此对于类的静态属性,没有析构方法为你兜底,请主动显示的释放掉资源。

对于变量的使用,不管什么类型,使用完之后,请记得做清理工作,特别是在静态变量中。php数组是高效的,但是也是吃内存的家伙。可以参考文章PHP数组到底占用多少内存空间。对于php web应用而言,出现内存问题的可能性不大,问题也不容易显现,因为每次请求之后,所占用的资源就被释放掉了。但是目前php常驻内存的应用逐渐广泛,内存的问题就变得尤为明显。当一个程序连续不断的跑,每次处理请求都会有1k内存的增加,那么1024就能产生1M内存的增加。时间久了,就容易造成系统资源不足,进程被系统强制kill。自己用的东西,自己得清理干净。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G13LDD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券