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 リスト
小さなメモリ テーブル: free_buckets-
大きなメモリ テーブル: larg_free_buckets-
- 残りのメモリ テーブル:rest_buckets
最初の 2 つは HashTables であり、各 HashTable は独自のハッシュ関数。