Re: [問題] 物件記憶體回收

看板Perl作者 (Cindy Wang)時間12年前 (2011/11/05 12:50), 編輯推噓4(401)
留言5則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《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

11/05 14:56, , 1F
這一定要推的
11/05 14:56, 1F
※ 編輯: CindyLinz 來自: 210.242.246.249 (11/05 16:11)

11/05 17:16, , 2F
推!
11/05 17:16, 2F

11/05 22:11, , 3F
這好棒!! 感謝C大 m(_ _)m
11/05 22:11, 3F

11/06 00:50, , 4F
11/06 00:50, 4F

12/20 10:48, , 5F
Cindy++
12/20 10:48, 5F
文章代碼(AID): #1EjC2SBW (Perl)
討論串 (同標題文章)
文章代碼(AID): #1EjC2SBW (Perl)