PHP一次生命周期内存的原理?php内存分配怎么理解

PHP 专栏收录该内容
101 篇文章 0 订阅

PHP之所以会在请求结束后正确的释放掉所有的资源, 内存, 这是因为当我们在脚本中使用新的内存的时候, PHP会向OS申请一大块内存(ZEND_MM_SEG_SIZE大小), 然后分给你你需要的合适的一块小内存. 当你不使用这块小内存的时候, PHP也不会返还给OS, 而是保留下来给后续的处理使用.PHP之所以会在请求结束后正确的释放掉所有的资源, 内存, 这是因为当我们在脚本中使用新的内存的时候, PHP会向OS申请一大块内存(ZEND_MM_SEG_SIZE大小), 然后分给你你需要的合适的一块小内存. 当你不使用这块小内存的时候, PHP也不会返还给OS, 而是保留下来给后续的处理使用.所以, 如果你使用完了资源不及时释放, 那么后续的逻辑如果请求内存, PHP发现之前申请的一大块内存已经分光了, 它就只好再次向OS发起malloc调用, 得到一块新的大内存. 并且它还需要对这个大内存做一些标记处理.而如果你使用完资源, 及时释放的话, 那么下次脚本申请内存的时候, 你之前归还的内存块就可以被重复利用, 那么也许你的整个脚本只需要和OS申请一次内存.

首先明确PHP所有申请的内存在PHP脚本执行结束之前不会自动释放。
这里需要理解PHP脚本的执行方式,每次PHP接收并处理一个新的请求是PHP运行的一次生命周期,在这个过程中你的PHP代码定义了很多类,函数使用了很多变量,类方法和函数运行过程是不是需要内存咧,变量是不是需要变量咧,方法或函数中定义的变量在调用执行后这部分局部变量使用的内存被回收,这是使用的一部分内存,另一部分是全局变量。局部变量会在方法或函数执行结束后自动释放,但是全局变量不会释放,除非你手动销毁,注意啦这里的释放或销毁的内存不会返回给OS,它还在PHP手里,举个栗子吧:国家、酒店和客人;在一个国家内所有财产都属于这个国家(OS);酒店提供商(PHP)向国家申请建立一个或多个酒店,酒店提供商拥有酒店管理权;客人来酒店入住酒店,有人常住(全局变量),有的人住一段时间(局部变量),不住的房间酒店回收给下一个客人入住。因为入住火爆,所有的房间都住满了,酒店提供商继续申请建设新酒店(申请新内存);直到酒店提供商最后倒闭了(PHP执行结束),国家收回酒店提供商的财产。这就是PHP一次生命周期内存的原理。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值