1. PHP / Говнокод #5339

    +163

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    <?php	
    if (gc_disable()) gc_enable();
    
    $a = array();
    $a[0] = &$a;
    unset($a);
    
    if (gc_disable()) gc_collect_cycles();
    ?>

    Типа "освободил" память. )))

    Запостил: dwinner, 20 Января 2011

    Комментарии (14) RSS

    • а просто unset не вернет память?
      Ответить
      • Тут же циклическая зависимость: дедка за бабку, бабка за дедку...
        Ответить
        • прям вендетта, однако
          Ответить
          • Ну слава богу не инцест, а то ещё сложнее было бы контролировать утечки памяти ;-)
            Ответить
    • ого)
      пых оказывается до явного управления GC дожил
      лет 10, и у них стратегию ГЦ выбиратьм ожно будети
      Ответить
    • С учетом того как в пыхе работает сборщик мусора, то я не удивляюсь подобному коду, память утекает очень порядочно. Теряет ссылки тоже без проблем. Частенько приходилось разгребать утечки.
      Ответить
      • Можно примерчик?
        Ответить
        • <?php
          class Father {
            public $children = array();
            function __destruct() { echo 'Father died<br />'; }
          }
          class Child {
            public $father;
            function __construct(Father $father) { $this->father = $father; }
            function __destruct() { echo "Child died.<br>"; }  
          }
          $father = new Father;
          $child = new Child($father);
          $father->children[] = $child;
          echo 'all family members are already alive ... Kill them all!<br />';
          $father = $child = null;
          echo 'all family members are died but zombies have already alive!<br />';
          ?>
          Ответить
          • All your base are belong to us!
            Ответить
            • Та Костарёв? Или может быть Котеров? Или может выскочка?
              Ответить
          • О, спасибо. Отличный пример. Теперь буду в курсе.
            Ответить
          • Кстати, вот корректно работающий пример:
            <?php
            class Father {
              public $children = array();
              function __destruct() { echo 'Father died<br />'; }
            }
            class Child {
              public $father;
              function __construct(Father $father) { $this->father = $father; }
              function __destruct() { echo "Child died.<br />"; }
            }
            $father = new Father;
            $child = new Child($father);
            $father->children[] = &$child;
            echo 'all family members are already alive ... Kill them all!<br />';
            $father = $child = null;
            echo 'all family members are died but zombies have already alive!<br />';
            echo 'end';
            ?>
            Ответить
            • Вы уверены?! Смотрите memory-dump. & в PHP5 ничего не изменит, но всё таки есть возможность уничтожить циклические ссылки, тем самым тут же освободив память.
              Ответить

    Добавить комментарий