美文网首页
PHP 内存管理

PHP 内存管理

作者: 人在码途 | 来源:发表于2017-01-18 10:45 被阅读69次

第一部分:内存管理

PHP不需要显式的对内存进行管理,这些工作都由Zend引擎进行管理了。PHP内部有一个内存管理体系, 它会自动将不再使用的内存垃圾进行释放。
当系统提示如下错误时,说明php已经达到了允许使用的最大内存了。

Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

一般造成内存不足的原因可能有:
一次性读取超大文件到内存

超大的数组

循环没有及时释放不在使用的变量

php默认的最大使用内存是32M,可以通过php.ini 修改内存分配。

memory_limit = 128M

也可以通过php程序设置,php没有禁用ini_set() 的时候

<?php

int_set("memory_limit", "1024M");

动态调整内存前,可以先获取当前内存的分配和使用情况,可以通过两个方法:

int memory_get_usage([ bool $real_usage = false ] );//返回当前分配给你的 PHP 脚本的内存量,$real_usage如果设置为 TRUE,获取系统分配的真实内存尺寸。如果未设置或者设置为 FALSE,将是 emalloc() 报告使用的内存量。

int memory_get_peak_usage ([ bool $real_usage = false ] );//返回分配给你的 PHP 脚本的内存峰值字节数,如果设置为 TRUE 可以获取从系统分配到的真实内存尺寸。 如果未设置,或者设置为 FALSE,仅会报告 emalloc() 使用的内存。

下面是php的内存管理器流程


06-02-01-zend-memeory-manager.jpg

]
它分为三层:存储层(storage)、堆层(heap)和接口层(emmalloc/efree)。存储层通过malloc()、mmap()等函数向系统申请内存,并通过freeze()函数释放所申请的内存。储层通常申请的内存块都比较大,这里申请的内存大并不是指storage层结构所需要的内存大, 只是堆层通过调用存储层的分配方法时,其以大块大块的方式申请的内存,存储层的作用是将内存分配的方式对堆层透明化。

摘自:
http://www.php-internals.com/book/?p=chapt06/06-02-php-memory-manager

http://www.laruence.com/2011/03/04/1894.html

相关文章

  • PHP 内存管理

    第一部分:内存管理 PHP不需要显式的对内存进行管理,这些工作都由Zend引擎进行管理了。PHP内部有一个内存管理...

  • PHP内存管理

  • PHP 的垃圾收集机制是怎样的

    PHP 可以自动进行内存管理,清除不再需要的对象。 PHP 使用了引用计数(reference counting)...

  • zend内存管理

    c和php的最主要区别:是否控制内存指针。 内存管理 在php内核层,每次都做到及时释放,这是相当难的事情。p...

  • PHP 技能精进之 PHP-FPM 多进程模型

    PHP-FPM 提供了更好的 PHP 进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。那么当我们谈论...

  • php相关

    1. PHP的垃圾收集机制 PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referenc...

  • 从原理分析PHP性能

    从原理分析PHP的性能,主要从以下几个方面:内存管理、变量、函数、运行机制、网络模型来进行分析。 1.内存管理 类...

  • php垃圾回收机制

    具体查看php文档 垃圾回收机制. 在php5.3之前php使用引用计数的方式管理内存。所有变量保存在zval变...

  • 分享一波腾讯PHP面试题

    1.php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。PHP 使用了引用计数 (refere...

  • 目录

    一、基础PHP 1.1 PHP构成和生命周期 1.2 数据类型和内存管理 1.3 编译执行 1.4 简述基础语法(...

网友评论

      本文标题:PHP 内存管理

      本文链接:https://www.haomeiwen.com/subject/xswvbttx.html