PHP内核--内存泄漏与新垃圾回收机制

垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。 垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。
PHP也在语言层实现了内存的动态管理,这在前面的章节中已经有了详细的说明, 内存的动态管理将开发人员从繁琐的内存管理中解救出来。与此配套,PHP也提供了语言层的垃圾回收机制, 让程序员不必过分关心程序内存分配。
在PHP5.3版本之前, PHP只有简单的基于引用计数的垃圾回收,当一个变量的引用计数变为0时, PHP将在内存中销毁这个变量,只是这里的垃圾并不能称之为垃圾。 并且PHP在一个生命周期结束后就会释放此进程/线程所占的内容,这种方式决定了PHP在前期不需要过多考虑内存的泄露问题。 但是随着PHP的发展,PHP开发者的增加以及其所承载的业务范围的扩大。
在PHP5.3中引入了更加完善的垃圾回收机制。 新的垃圾回收机制解决了无法处理循环的引用内存泄漏问题。下边,我们将配合实例测试数据,探讨一下新的垃圾回收机制。

(tips: refcount和zval是什么?
每个变量在PHP底层都是一个zval的结构体中保存,相同值得变量共用一个值,用refcount来保存指向这个值得变量个数,
比如$a=$b=1,则他们指向一个zval,值为1,refount=2 ,表示有两个变量指向了它,详细了解见 PHP内核的存储机制(分离/改变) )
下边是实际数据的一个测试,结论在右下角:


如何避免内存泄露:
1. 写高质量代码,减少内存泄漏的可能
2.根据PHP生命周期回收,让系统自动回收内存(对于非常驻行程序有效,RINIT ,RSHOTDOWN)
3.手动回收,即重启服务器nginx或apache (MINIT ,MSHOTDOWN)
4.调高php.ini配置文件: php.ini memory_limit = 128M(不推荐) 
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 38218371 bytes)  128MB = 134217728byte
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值