|
|
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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1667954d77783.html, оценка из 5, голосов 10
|