zoukankan      html  css  js  c++  java
  • PHP内核研究(内存管理1)

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

  • 相关阅读:
    第四章 虚拟机性能监控与故障处理工具
    C++_异常5-异常规范和栈解退
    C++_异常4-将对象用作异常类型
    C++_异常3-异常机制throw try catch
    C++_异常2-返回错误码
    C++_异常1-调用abort()
    C++_类继承7-类设计回顾
    C++_类继承6-继承和动态内存分配
    C++_类继承5-抽象基类
    C++_类继承4-访问控制protected
  • 原文地址:https://www.cnblogs.com/Summer7C/p/5567792.html
Copyright © 2011-2022 走看看