作者justaID (快樂崇拜)
看板Flash
標題[討論] 物件佔用資源的問題
時間Thu Sep 2 00:35:45 2010
想請教以下各種情況,對資源的影響:
1. 宣告某變數並new實體,但沒有addChild進舞台
那該物件是否佔用資源?
EX: var x=new Apple(); (此時x是否已經佔用資源?)
2. 一個變數new 2次,資源也佔2份嗎?
EX: var x=new Apple();
x=new Banana(); (這樣會Apple和Banana各佔一份資源,還是Apple會釋放?)
2. remove之後,是否該物件的記憶體資源就能被釋放?
EX: var x=new Apple();
this.addChild(x);
this.removeChild(x); (此時x佔用的資源是否被釋放了?
還是不存在stage上,但依然佔著資源?)
--------------------------------------------------------------------
用 / 爬"資源",找到一篇文章討論到資源
在推文裡有神人(人稱的CJ神?!)
解釋Flash管理記憶體的方式(garbage collector)
原理大概可以體會,但實際上怎麼運作還是一頭霧水
所以用上面3種很具體的情況來發問
謝謝~
(下面附上神人的解說)
推 cjcat2266:Flash管理記憶體的方式是garbage collector 11/08 00:08
→ cjcat2266:Google一下可以查到GC的運作機制 11/08 00:08
→ cjcat2266:簡單來說,當有一個物件你不需要使用的時候 11/08 00:08
→ cjcat2266:可以讓裝載它reference的變數值為null 11/08 00:08
→ cjcat2266:當一個物件不再被任何一個變數裝載refernce的時候 11/08 00:09
→ cjcat2266:GC就會在需要記憶體的時候去把該物件從記憶體上消除掉 11/08 00:09
→ cjcat2266:因為它再也沒有辦法被存取到,所以它佔用著記憶體 11/08 00:10
→ cjcat2266:至於你說的function裡面宣告變數,這叫local variable 11/08 00:10
→ cjcat2266:一離開function之後該變數就不見了 11/08 00:11
→ cjcat2266:如果該變數是某個物件唯一的reference 11/08 00:11
→ cjcat2266:那該物件也會在適當時機被GC處理掉
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.44.9.235
※ 編輯: justaID 來自: 114.44.9.235 (09/02 00:42)
推 dsmwang:1.會佔用資源,但是佔多佔少要看Apple有沒有耗資源的方法 09/02 01:00
→ dsmwang:2.因為那個Apple再也存取不到了,所以會被釋放,只佔一份 09/02 01:00
→ dsmwang:3.remove了,但是x仍然存在,同1 09/02 01:01
→ dsmwang:雖然他會幫你刪,但其實可以手動用delete語法刪掉~ 09/02 01:11
→ justaID:感謝解答! 請問手動刪要用什麼函數? 09/02 02:44
→ justaID:眼殘了,精華區裡有delete的解說 09/02 15:10