博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP内核研究(内存管理1)
阅读量:4983 次
发布时间:2019-06-12

本文共 846 字,大约阅读时间需要 2 分钟。

PHP内存管理

  • PHP在5.3之前采用的是引用计数法
  • PHP在5.3之后采用了新的垃圾回收机制

操作系统在申请内存空间的时候回引发系统调用

  • 在操作系统申请内存空间的时候,会将CPU从用户态切换到内核态,切换成本很高(会导致性能问题)
  • PHP的默认最大内存使用时32M
    在php.ini中
memory_limit=32M

或者采用动态方式修改最大内存:

  • 获取目前内存使用情况
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*1024ZEND_MM_SEG_SIZE    //默认的内存分配方案4种
  • PHP内存维护3个列表
  1. 小块内存表:free_buckets
  2. 大块内存表:larg_free_buckets
  3. 剩余内存表:rest_buckets

    前两个为HashTable,每个HashTable都有自己的哈希函数。

转载于:https://www.cnblogs.com/Summer7C/p/5567792.html

你可能感兴趣的文章
hdu4009最小树形图
查看>>
bzoj1009: [HNOI2008]GT考试 ac自动机+矩阵快速幂
查看>>
UVA 784 Maze Exploration
查看>>
UVA 10905 Children's Game
查看>>
ZOJ 2676 Network Wars
查看>>
网站字体的导入代码
查看>>
iOS中图像处理技术资料:
查看>>
SQL基础教程第三章笔记
查看>>
Colidity-- StoneWall
查看>>
第一章:windows下 python 的安装和使用
查看>>
【未整理】web.xml加载顺序.RP
查看>>
JDK7新增Objects方法介绍(同时包含JDK8新添加的方法)
查看>>
Airport(未解决。。。)
查看>>
LightOJ 1338 && 1387 - Setu && LightOJ 1433 && CodeForces 246B(水题)
查看>>
yii2 实战教程之如何安装
查看>>
Spring整合Hibernate与Struts
查看>>
ORA-02041: client database did not begin a transaction
查看>>
判断浏览器JS
查看>>
U33405 纽约
查看>>
method_missing in JavaScript
查看>>