看板 Perl 關於我們 聯絡資訊
※ 引述《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
abliou:這一定要推的 11/05 14:56
※ 編輯: CindyLinz 來自: 210.242.246.249 (11/05 16:11)
xatier:推! 11/05 17:16
rkcity:這好棒!! 感謝C大 m(_ _)m 11/05 22:11
cutecpu:推 11/06 00:50
kornelius:Cindy++ 12/20 10:48