Недавно я провел такой эксперимент - новые объекты постоянно появляются в непрерывном цикле без сохранения каких-либо ссылок на них, поэтому они должны быть уничтожены сборщиком мусора в ближайший подходящий момент. Единственная особенность состоит в том, что объекты очень велики с точки зрения использования памяти - один объект содержит массив из 70 миллионов элементов. Это код:
class Temp {
private $data;
function __construct() {
$this->data = range(1,70000000);
}
}
while (true) {
new Temp();
}
Я был очень удивлен, что в графике использования памяти нет типичного поведения сборщика мусора. Вот оно (70 миллионов элементов в массиве):
Вопрос - где пилообразная ?
Мое лучшее предположение заключается в том, что процессы выделения и сбора объектов начинают работать одновременно или что-то еще происходит здесь.
РЕДАКТ. 1:
Когда количество элементов в массиве уменьшается до 60 миллионов - я получаю
Пилообразное поведение ГХ, как и ожидалось (60 миллионов элементов в массиве):
РЕДАКТИРОВАТЬ 2:
В случае, если количество элементов в массиве увеличено (90 миллионов элементов в массиве) - я получаю обратный пилообразный график! :
Похоже, что тест с 70 миллионами элементов - это грань между этими двумя различными формами пилообразной формы. Но причины этого мне неясны.