PHP内核研究(内存管理1)
2016-06-07 17:49
393 查看
PHP内存管理
PHP在5.3之前采用的是引用计数法PHP在5.3之后采用了新的垃圾回收机制
操作系统在申请内存空间的时候回引发系统调用
在操作系统申请内存空间的时候,会将CPU从用户态切换到内核态,切换成本很高(会导致性能问题)PHP的默认最大内存使用时32M
在php.ini中
memory_limit=32M
或者采用动态方式修改最大内存:
<?php ini_set("memory_limit","128M"); //修改内存为128M >
获取目前内存使用情况
memory_get_usage() //目前PHP脚本所用的内存大小 memory_get_peak_usage() //返回当前位置占用内存峰值,这样就可以知道内存峰值 autoload() //避免一次性包含不一定会使用的类
PHP的内存分布和管理
|应用层Applecation|||||-----|||
| 接口层 Emalloc/efree|堆层Heap|存储层Storange||
|malloc|win32|mmap_anon|mmap_zero|
存储层:使用malloc和mmap向系统真正的申请空间,使用free函数释放
控制层:控制整个内存管理的过程(控制层PHP内存管理的核心)
使用宏定义来实现上层和下层分离(门面模式)
内存管理
初始化:zend_mm_startup(); //初始化存储层 zend_mm_startup_ex(); //初始化堆层 ZEND_MM_SEG_SIZE //默认256*1024 ZEND_MM_SEG_SIZE //默认的内存分配方案4种
PHP内存维护3个列表
小块内存表:free_buckets
大块内存表:larg_free_buckets
剩余内存表:rest_buckets
前两个为HashTable,每个HashTable都有自己的哈希函数。
相关文章推荐
- php cURL library is not loaded
- win2008 iis7/iis7.5下最简单最强安装多版本PHP支持环境
- TP框架下 xml_encode的用法
- mac下得matplotlib配置
- 【php学习】图片处理三步走
- HDOJ 1091 A+B for Input-Output Practice (III)
- PHP开发知识
- 使用matplotlib的示例:调整字体-设置刻度、坐标、colormap和colorbar等
- 配置FTP服务器提供上传下载功能
- PHP中is_file,file_exists的区别,is_file 不能替代file_exits的理由
- PHP中提供的用于MySQL的主要API是什么?(官网整理)
- PHP 获取IP 相关
- Yii2 验证码
- PHP-表单
- Windows 2008 R2 下IIS7.5+PHP5.2环境配置(FastCgi设置)
- Yii2.0开发初学者必看
- Laravel ——路由(中间件与路由组)
- 详解PHP使用DOMDocument类遍历、增加、修改、删除XML节点操作
- 【PHP】Windows环境Hello World
- php数组