PHPのmemory_limitが約25秒の実行時に50M
に設定されていると、正常に実行されるスクリプトがあります。スクリプトの最後にmemory_get_peak_usage
を印刷すると、かなり接近して50M
になります。 memory_limitを高く設定すると、90M
になり、memory_get_peak_usage
は約75M
となり、スクリプトの読み込み速度は約10秒向上します。PHPは制限に基づいてメモリ使用量を動的に処理しますか?
memory_limitに関係なく、スクリプトがほぼ同じ量のメモリを使用することは直感的ですが、そうではありません。スクリプトが最大で512Mで最大値が50M
になった場合、memory_limitが増加したにもかかわらずピーク使用率が同じになると予想していました。
唯一の説明は、PHPが限界に近いことを認識し、制限を打つのを避けるために未使用のメモリをクリアする時間を費やすことです。これが実際にどのように機能するのでしょうか、それとももっと大きなものの表面を傷つけただけですか?
私はこの既存のQ&Aがあなたの質問に関連して非常に興味深いことを発見しました:[PHPでメモリを解放する](http://stackoverflow.com/q/2461762/367456)。ここで問題になる可能性が最も高いメモリを再割り当てするという話題にも傷つきます。しかし、それは具体的なコードに依存しており、あなたは何も表示していないので、あなたが経験するものがガベージコレクターの方が頻繁に起きるからです。 http://lxr.php.net/xref/PHP_5_4/Zend/zend_alloc.c#1876 – hakre