您的位置:首页 > 编程语言 > PHP开发

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都有自己的哈希函数。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: