作者CindyLinz (Cindy Wang)
看板Perl
标题Re: [问题] 物件记忆体回收
时间Sat Nov 5 12:50:33 2011
※ 引述《rkcity (喵。罐头)》之铭言:
: 有爬到一篇也是记忆体回收的文
: 结论是 perl 用 ref count 会马上free
: 不过下面的code却没有马上free
: 看来应该是我写错了 >_<
: 麻烦大大们抽空帮我诊断 ._./
: - - - - - - - - - - - - - - - - - - - -
: my @Array;
: while( <FILE> ){
: ...
: my $Job_obj = Job->new();
: push( @Array, $Job_obj );
: ...
: }
: undef( @Array ); # 没有回收记忆体
: - - - - - - - - - - - - - - - - - - - -
: 也试过逐一去 undef $Array[$i] 结果也是一样
: 照理说 undef 掉 Array 也就删掉了物件的ref
: ref被删,物件所占用的记忆体空间应该要回收才是ˊˋ"
推荐使用 Devel::FindRef 来检查还有谁 ref 到它们~
http://search.cpan.org/~mlehmann/Devel-FindRef-1.422/FindRef.pm
你可以在 undef @Array 之前,
print Devel::FindRef::track \$Array[0];
print Devel::FindRef::track \$Array[1];
...
可以看到每一个元素都有谁 ref 到.
(虽然我觉得看这个有一点辛苦.. :Q)
不过除了 $Job_obj 们可能被 ref 到以外,
也有可能是 $Job_obj 「里面」的成员被 ref 到..
也就是 $Job_obj 的空间被释放了, 但是它的一部分成员还在..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.242.246.249
1F:推 abliou:这一定要推的 11/05 14:56
※ 编辑: CindyLinz 来自: 210.242.246.249 (11/05 16:11)
2F:推 xatier:推! 11/05 17:16
3F:推 rkcity:这好棒!! 感谢C大 m(_ _)m 11/05 22:11
4F:推 cutecpu:推 11/06 00:50
5F:→ kornelius:Cindy++ 12/20 10:48