PHPカーネル研究(メモリ管理1)

WBOY
リリース: 2016-06-23 13:02:43
オリジナル
754 人が閲覧しました

PHP のメモリ管理

  • PHP は 5.3 より前は参照カウント方式を使用していました
  • PHP は 5.3 以降、新しいガベージ コレクション メカニズムを採用しました
  • オペレーティング システムは、メモリ領域を適用するときにシステム コールをトリガーします

  • オペレーティング システムで適用するメモリ領域が枯渇すると、CPU はユーザー モードからカーネル モードに切り替わります。切り替えコストは非常に高くなります (パフォーマンスの問題が発生します)
  • PHP のデフォルトの最大メモリ使用量は 32M です
    php.ini で

    memory_limit=32M
    ログイン後にコピー

    またはuse 最大メモリを動的に変更します:

    <?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

      最初の 2 つは HashTables であり、各 HashTable は独自のハッシュ関数。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート