memory_get_usage()
" Возвращает объем памяти, в байтах, который в настоящее время выделен для вашего сценария PHP. "
Это объем памяти, выделенный процессу для ОС, , а не объем памяти, используемый назначенными переменными. PHP не всегда освобождает память обратно в ОС - но эта память все еще может быть повторно использована при выделении новых переменных.
Демонстрировать это просто. Измените конец вашего скрипта на:
memstat();
waste_lots_of_memory(10000);
memstat();
waste_lots_of_memory(10000);
memstat();
Теперь, если вы правы, а PHP фактически теряет память, вы должны увидеть, что использование памяти увеличилось вдвое. Тем не менее, вот фактический результат:
current memory usage: 88272
current memory usage: 955792
current memory usage: 955808
Это связано с тем, что память "освобождается" после первоначального вызова waste_lots_of_memory () повторно используется вторым вызовом.
За 5 лет работы с PHP я написал сценарии, которые обрабатывали миллионы объектов и гигабайт данных в течение нескольких часов, и сценарии, которые выполнялись месяцами одновременно. Управление памятью в PHP не очень хорошее, но оно не так плохо, как вы думаете.