Re: [討論] 物件佔用資源的問題

看板Flash作者 (高 見龍)時間15年前 (2010/09/02 01:28), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《justaID (快樂崇拜)》之銘言: : 想請教以下各種情況,對資源的影響: : 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上,但依然佔著資源?) AS3有個東西叫做display list 只有被加到display list裡的東西,才有機會在畫面上被看到 怎麼讓東西加到display list? addChild(當然addChildAt也是) 反之,透過removeChild就是把東西移出display list 要注意的是移出display list跟visible = false是不一樣的事情 一個是根本不在場景上,一個是在場景上只是看不到而已 1. 是 即使不在display list也一樣,new的動作就是跟電腦要一塊記憶體來用 所以看不到也還是佔記憶體 2. 是,也不是 變數x一開始指向一個new Apple,過沒多久換指向new Banana 因為new Apple不再被x所指向,系統就會認為它沒人要,是"準備"要丟掉的東西了 至於什麼時候丟掉? 這就由GC機制決定了..也許很快,也許一下子 在GC還沒把垃圾收走的那個當下,它的確是佔兩份資源 收走了,就是只佔一份了 3. 否 同1,不在display list只是代表它不會被render出來讓你看到 但它還是存在記憶體裡的 -- http://blog.eddie.com.tw/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.139.9

09/02 01:47, , 1F
請問Flash有特別針對GC做處理嗎? 像狀況2在C, 除非程式
09/02 01:47, 1F

09/02 01:48, , 2F
終止, 要不然是回收不回來的(或許有別的方式但我不會)
09/02 01:48, 2F

09/02 01:50, , 3F
另外, 關於 不在場景裡 跟 visible=false 的情況下, 對
09/02 01:50, 3F

09/02 01:51, , 4F
畫面更新速度而言, 兩者是否有差異?
09/02 01:51, 4F

09/02 02:08, , 5F
我猜有差吧?在場景列表裡的應該還需要檢查一次。
09/02 02:08, 5F

09/02 02:47, , 6F
感謝詳細解說! 依照第2點的解說,如果是Array用splice()
09/02 02:47, 6F

09/02 02:48, , 7F
移除元素,被移除的元素因為不再被陣列所指,就被列為準備
09/02 02:48, 7F

09/02 02:49, , 8F
丟掉的垃圾,這樣對嗎?
09/02 02:49, 8F

09/02 02:49, , 9F
(以上前提: 已經從畫面上removeChild() )
09/02 02:49, 9F
文章代碼(AID): #1CVeqmnb (Flash)
文章代碼(AID): #1CVeqmnb (Flash)