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

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

黄舟
Lepaskan: 2023-03-06 13:24:01
asal
2094 orang telah melayarinya

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

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan