[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сборщик мусора
krasilich
Всем известно что разработчики php встроили в язык автоматический сборщик мусора, тем самым лишив программистов 50% работы над программой и различной головной боли связанной с применением оператора delete (или ему аналогичного).

Насколько я разобрался в реализации сборки мусора в пхп, то все неиспользуемые ресурсы удаляются из памяти максимально быстро (но не мгновенно), после закрытия всех ссылок на данный ресурс.

Но (тут я могу ошибаться), большинство ресурсов закрываются при завершении скрипта. Я не встречал в коде ручных закрытий ссылок на ресурсы. Тоесть вся очистка памяти происходит в конце работы скрипта.
(конец раздела, где я могу ошибаться)

Если я все-таки, не ошибаюсь, и все происходит именно так, имеет ли смысл вручную закрывать ссылки на ресурсы ради оптимизации (уменьшения расхода оперативной памяти)?

Пример: если у нас есть строка в 100 байт, мы уверенны что дальше в коде мы эту переменную не используем, присваиваем переменной NULL, это приведет к уменьшению использованной оперативной памяти на 100 байт?




Спустя 6 минут, 26 секунд (29.01.2010 - 15:28) FatCat написал(а):
http://www.php.ru/manual/language.oop5.decon.html

И конечно же flush() никто не отменял. wink.gif

Спустя 7 минут, 18 секунд (29.01.2010 - 15:35) krasilich написал(а):
FatCat
Чесно, не понял, к чему ссылка, и при чем flush()? wacko.gif

Кстати, по поводу ссылки
Цитата

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() вывод же не буферизуется поэтому не занимает память.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.