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个列表
  1. 小块内存表:free_buckets
  2. 大块内存表:larg_free_buckets
  3. 剩余内存表:rest_buckets

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

PHP内核研究(内存管理1)的更多相关文章

  1. Linux内核笔记--内存管理之用户态进程内存分配

    内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...

  2. 24小时学通Linux内核之内存管理方式

    昨天分析的进程的代码让自己还在头昏目眩,脑子中这几天都是关于Linux内核的,对于自己出现的一些问题我会继续改正,希望和大家好好分享,共同进步.今天将会讲诉Linux如何追踪和管理用户空间进程的可用内 ...

  3. Linux内核之内存管理

    Linux内核之内存管理 Linux利用的是分段+分页单元把逻辑地址转换为物理地址; RAM的某些部分永久地分配给内核, 并用来存放内核代码以及静态内核数据结构; RAM的其余部分称动态内存(dyna ...

  4. Linux内核之内存管理完全剖析

    linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析   (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...

  5. windows内核驱动内存管理之Lookaside使用

    Windows内存管理中使用了类似于容器的东西,叫做Lookaside对象,每次程序员申请内存都会从Lookaside里面申请,只有不足的时候,Lookaside才会向内存又一次申请内存空间,这样减少 ...

  6. 深入理解Linux内核-内存管理

    内核如果给自己分配动态内存 动态内存:RAM的某些部分被永久打分配给内核,用来存放内核代码以及静态内核数据结构:剩余的部分被称为动态内存 连续物理内存区管理: 页框管理:1.页大小的选择,通常情况下主 ...

  7. IA-32e架构下的内核初始化内存管理

    初级内存管理单元 关于内存的分页 以往的物理页是按照4KB进行分配和管理的, 而在Linux之后流行的就是2MB大小的物理页的分配和管理, 整个物理内存管理单元也是2MB物理页管理的 先获取基本的物理 ...

  8. Linux 内核开发 - 内存管理

    1.1什么是内存管理 内存管理是对计算机内存进行分配和使用的技术.内存管理主要存在于多任务的操作系统中,因为内存资源极其有限.须要在不同的任务之间共享内存,内存管理的存在就是要高效.高速的非配内存,并 ...

  9. Linux内核之 内存管理

    前面几篇介绍了进程的一些知识,从这篇开始介绍内存.文件.IO等知识,发现更不好写哈哈.但还是有必要记录下自己的所学所思.供后续翻阅,同时写作也是一个巩固的过程. 这些知识以前有文档涉及过,但是角度不同 ...

随机推荐

  1. android知识杂记(二)

    记录项目中的android零碎知识点,用以备忘. AsyncQueryHandler 继承与handler,可以用于处理增删改(ContentProvider提供的数据) 例如:query = new ...

  2. Linux下Java开发环境搭建—CentOS下Mysql安装教程

    本人学习Linux时使用的是CentOs5.5版本,在该环境中,Mysql的安装方法有很多种,下面我只讲我这次成功了的方法,作为一个记录,供大家参考,同时给自己做一个笔记. MySQL下载 1.进入网 ...

  3. eclipse启动不了

    因为eclipse运行变得非常慢,我想再次增加一下eclipse的最大内存,以期待使eclipse能够快速的响应. 参照某些资料,我也不知道什么时候改成了这样: -vmargs-Xms512m-Xmx ...

  4. 说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现

    返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以 ...

  5. NodeJS系列~第二个小例子,解决中文乱码的问题

    返回目录 为了使页面支持的字符更多,所以编码使用UTF-8,注意,你的原js文件的编码也要是utf-8的,可以通过记事本进行编码的修改

  6. NodeJS系列~第四个小例子,NodeJs处理Get请求和Post请求

    返回目录 说在前 对于HTTP请求来说,我们通常使用的是Get和Post,除此之外还有put,delete等,而对于get来说,比较lightweight,只是对字符串的传输,它会被添加到URL地址里 ...

  7. [Linux]Linux下redis的安装及配置.

    在上一篇[Linux] linux下安装配置 zookeeper/redis/solr/tomcat/IK分词器 详细实例. 我们已经将redis所需tar包拷贝到了linux下的root 根目录下, ...

  8. Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结

    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结 1.1. 素描滤镜的实现方法比较简单,这里我们直接写出算法过程如下:1 1.2. 颜色减淡COLOR_DO ...

  9. Atitit 为什么网络会有延时 电路交换与分组交换的区别

    Atitit 为什么网络会有延时 电路交换与分组交换的区别 按道理,网络是电子设备联网,应该达到光速才对.. 本质上因为互联网基于分组交换而不是电路交换. 分组交换相当于队列方式,别人发你的数据包先存 ...

  10. Atitit  如何让精灵控件运动

    Atitit  如何让精灵控件运动 ##让Sushi精灵动起来 上面的代码,我们创建了静态的sushiSprite,现在我们让它动起来.使它从屏幕顶部下落到屏幕底部.在addSushi方法中添加如下代 ...