четверг, 31 января 2013 г.

Garbage collection PHP vs CRuby vs Go

    Раньше меня интересовало - а есть ли вообще сборщик мусора в PHP. Нет, я понимал что он должен был быть где-то - но он настолько херово работал до недавнего времени - что казалось что его вообще нет.  Нормально он заработал только после версии 5.3 когда он научился определять циклические ссылки. Вообще странно что мало кто пишет об этом очень важном для практического программирования нововведении. О позднем статическом связывании и замыканиях разве что ленивый не написал, а об этом ни слова. Хотя может я не там читал. Ради интереса прочитал статью про сборщик мусора в CRuby:
    Rare Are GC Talks   - на английском, но написана очень простым языком. Еще один плюс этой статьи - она объясняет все базовые алгоритмы сборки мусора на простых примерах. Если лень читать - то в кратце:
1. Ruby используется алгоритм mark & sweep
2. Они рассматривают 3 варианта новых сборщиков мусора
Для сравнения:
     В PHP используется алгоритм подсчета ссылок(Основы подсчета ссылок) - с дополнительным алгоритмом определения циклических ссылок (Сбор циклических ссылок)
     В Go также используется алгоритм mark & sweep, но в параллельном варианте. Еще одной особенностью его реализации является то что он совершенно не оказывает влияния на производительность если программа не выделяет память.

Комментариев нет:

Отправить комментарий