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

黄舟
풀어 주다: 2023-03-06 13:24:01
원래의
1823명이 탐색했습니다.

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

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


위 내용은 PHP内核-内存泄漏与新垃圾回收机制的图文介绍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!