Насколько я разобрался в реализации сборки мусора в пхп, то все неиспользуемые ресурсы удаляются из памяти максимально быстро (но не мгновенно), после закрытия всех ссылок на данный ресурс.
Но (тут я могу ошибаться), большинство ресурсов закрываются при завершении скрипта. Я не встречал в коде ручных закрытий ссылок на ресурсы. Тоесть вся очистка памяти происходит в конце работы скрипта.
(конец раздела, где я могу ошибаться)
Если я все-таки, не ошибаюсь, и все происходит именно так, имеет ли смысл вручную закрывать ссылки на ресурсы ради оптимизации (уменьшения расхода оперативной памяти)?
Пример: если у нас есть строка в 100 байт, мы уверенны что дальше в коде мы эту переменную не используем, присваиваем переменной NULL, это приведет к уменьшению использованной оперативной памяти на 100 байт?
Спустя 6 минут, 26 секунд (29.01.2010 - 15:28) FatCat написал(а):
Спустя 7 минут, 18 секунд (29.01.2010 - 15:35) krasilich написал(а):
FatCat
Чесно, не понял, к чему ссылка, и при чем flush()?
Кстати, по поводу ссылки
Чесно, не понял, к чему ссылка, и при чем flush()?
Кстати, по поводу ссылки
Цитата |
PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО языках, таких, как Java |
В Java нету деструкторов...
Спустя 5 минут, 17 секунд (29.01.2010 - 15:41) glock18 написал(а):
unset очищает память, а не = null;
Цитата |
В Java нету деструкторов... |
Спустя 7 минут, 43 секунды (29.01.2010 - 15:48) krasilich написал(а):
glock18
Тоесть оптимизировать способом ручного удаления ссылок на ресурсы можно?
Тоесть оптимизировать способом ручного удаления ссылок на ресурсы можно?
Цитата |
Цитата В Java нету деструкторов... http://apply-for-it.blogspot.com/2009/07/java.html |
Да, это действительно самое оно.
Спустя 4 минуты, 47 секунд (29.01.2010 - 15:53) FatCat написал(а):
Цитата (see_man @ 29.01.2010 - 16:35) |
при чем flush()? |
Предлагаю простой эксперимент в локалке:
for($i=0;$i<1000;$i++)
{
if(strlen(file_get_contents('http://ya.ru/')))echo "OK<br>";
else echo "---<br>";
//flush();
}
Запусти и минут через 5 посмотри в диспетчере задач винды расход оперативы; потом раскомментируй флюш и повтори эксперимент.
У меня разница иногда составляла десятки мегабайт...
Спустя 12 минут, 46 секунд (29.01.2010 - 16:06) krasilich написал(а):
А, все, понял.
Да, получается без flush() мы весь вывод храним в ОП, с flush() вывод же не буферизуется поэтому не занимает память.
Да, получается без flush() мы весь вывод храним в ОП, с flush() вывод же не буферизуется поэтому не занимает память.