Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP内核-内存泄漏与新垃圾回收机制的图文介绍

PHP内核-内存泄漏与新垃圾回收机制的图文介绍

黄舟
黄舟asal
2017-03-09 09:51:581917semak imbas

垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。 自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。

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


Atas ialah kandungan terperinci PHP内核-内存泄漏与新垃圾回收机制的图文介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn