Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Serge Chervjakov                     2:5020/400     07 Nov 2004  21:33:18
 To : All
 Subject : Рост в памяти
 -------------------------------------------------------------------------------- 
 
 Hi All,
 
 Hашел причину.. чуствую я, что дабы небыло такого, следовало где-то до конца
 дочитать или внимание обратить... причина вот в чем:
 package pac1;
 sub new
 {
   my ($class,$pac1)=@_;
   my $obj={pac1=>$pac1};
   for (my $i=0; $i<100; $i++) {
     $obj->{data}.='dla bistrogo rosta v pamyati...';
   }
   bless $obj,$class;
   return $obj;
 }
 package pac2;
 sub new
 {
   my ($class)=@_;
   my $obj={};
   for (my $i=0; $i<100; $i++) {
     $obj->{data}.='dla bistrogo rosta v pamyati...';
   }
   bless $obj,$class;
   $obj->{pac1}=pac1->new($obj);
   return $obj;
 }
 
 package main;
 
 for (my $i=0; $i<10000; $i++) {
   my $pac2=pac2->new();
   select undef,undef,undef,0.01;
 }
 
 т.е. оба объекта содержат в себе ссылки друг на друга... и наверное даже
 понятно, почему памятуха не очищается - когда из области видимости выходит
 $pac2, в нем самом же содержится ссылка на pac1, а уже в pac1 содержится
 ссылка на $pac2. Т.е. видимо перл считает, что не все ссылки на объект вышли
 из области видимости => объект должен жить...
 Вопрос: как избавиться-то?:) Добавление DESTROY { undef $_[0]->{pac1} } в pac2
 не помогло - видимо до DESTROY дело даже не доходит.. Совсем не нравится
 вариант, что руками надо вызывать undef $pac2 в цикле - ручная работа, можно
 забыть, да и не работает он - попробовал сейчас.. видимо сочетание нужно -
 дестрой и undef.. Соответственно еще меньше нравится вариант, что не
 пользоваться таким зацикливанием:))). Как автоматизировать?
 
 ЗЫ: лучше на perldoc.. книжек у меня под рукой нету:(.
 ЗЗЫ: начинаю понимать, почемуй-то вдруг HTML::TreeBuilder в своем perldoc
 пишет, что в общем-то не мешает сделать undef на объекты этого класса:). Хотя
 вряд ли из-за подобного - что-то мне подсказывает, что такое зацикливание
 классов др. на друга - очень плохой стиль и им никто не пользуется.. по
 известной причине:)). Hо млин... куча кода на этом завязана... и исправлять -
 только новых багов добавлять...
 
 --- ifmail v.2.15dev5.3
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Рост в памяти   Serge Chervjakov   07 Nov 2004 21:33:18 
 Рост в памяти   Ivan Frolkov   07 Nov 2004 21:42:10 
 Рост в памяти   Serge Chervjakov   08 Nov 2004 12:10:39 
 Re: Рост в памяти   Artem Chuprina   07 Nov 2004 23:06:50 
Архивное /ru.perl/1667954d77783.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional