PHP内核研究(内存管理1)

WBOY
풀어 주다: 2016-06-23 13:02:43
원래의
721명이 탐색했습니다.

PHP内存管理

  • PHP在5.3之前采用的是引用计数法
  • PHP在5.3之后采用了新的垃圾回收机制
  • 操作系统在申请内存空间的时候回引发系统调用

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

    memory_limit=32M
    로그인 후 복사

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

    <?phpini_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*1024ZEND_MM_SEG_SIZE    //默认的内存分配方案4种
    로그인 후 복사

  • PHP内存维护3个列表
    1. 小块内存表:free_buckets
    2. 大块内存表:larg_free_buckets
    3. 剩余内存表:rest_buckets

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

    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!