parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

забейте :)

Misha v.3 06.11.2010 01:21

т.к. это не принципиальные мелочи, которые тем не менее _иногда_ позволяют освободить чуть больше памяти (очень приблизительное объяснение: переменная A ссылалась на переменную B, которая попадает под "очистку". во время первого compact значение переменной A не может быть "очищено" из-за этой ссылки, но после его выполнения эта пропадает, и второй compact может "собрать" и эту память).

памяти действительно освобождается лишь немногим больше, т.к. объяснение очень-очень приблизительное и используемая библиотека в большинстве случаев сама прекрасно обнаруживает и решает описанные сценарии. не может она разобраться только с циклическими ссылками, и в этом случае помогает использование нескольких compact подряд, но "при нормальных условиях" циклических ссылок в коде присутствует совсем немного.

рекомендую вообще забыть про compact, т.к. он довольно медленный, и вспоминать про него только при получении ошибок о нехватке памяти в очень узких местах, таких как обработка большого количества данных в больших циклах, перед transform и после работы с _файлами_ (загрузили, закодировали, сохранили, память больше не нужна и её можно собрать).

но чтобы compact нормально работал нужно обязательно использовать локальные переменные.