1、內存泄漏函數
指因爲疏忽或錯誤形成程序未能釋放已經再也不使用的內存的狀況。應用程序分配某段內存後,因爲設計錯誤,失去了對該段內存的控制,於是形成了內存的浪費(百度搜的資料)。這段話是什麼意思呢?打個比方吧,放牛人與一隻牛,放牛人比如程序設計中的引用,牛比如對象。咱們經過引用來控制對象,放牛人經過繩子牽着牛,當牛吃完草後應該牽它回家而不是放手讓它走失。當咱們失去對該對象(某塊內存)的控制時就產生了「內存泄露」。設計
2、垃圾回收調試
簡單點說不用的內存都是垃圾,而垃圾回收就是把沒用的內存都回收以釋放內存空間。對象
AS3的垃圾回收主要有兩種方法:「引用計數法」和「標識清除法」。內存
引用計數法:當一個內存對象添加了一個引用的時候,這個計數器就加1,當刪除一個內存對象的引用時,該計數器就減1。當FP判斷計數器爲0的時候表示這個對象已經沒有引用了,沒有引用就沒辦法控制他了,符合垃圾回收機制的條件。但有一種狀況則會有所不一樣!當有多個對象互相引用的時候,全部的計數器始終爲1,這時就出現了內存泄露的狀況。舉個例子:rem
var a:Object = {}
var b:Object = {foo:a};get
a.foo = b;it
a=null;程序設計
b=null;百度
上述代碼中,全部對象的引用都被刪除了。沒有任何辦法在程序中再訪問這兩個對象了,但這兩個對象的引用計數器都是1,由於它們相互引用。 即該兩個內存塊確實是沒用了,可是垃圾回收機卻不清理它。可想而知,這個辦法在通常狀況下仍是不錯的,可是遇到這種狀況就不行了!因而要考慮第二種
方法了。
標識清除法: 這個方法在執行的時候會從FLASH的根對象也就是root開始到每個引用的對象作標識。而後FLASH會遍歷當前程序中的全部引用,發現沒有標識的對象就清除。這樣的話清除就準確了!可是會遇到一個問題。遍歷是很消耗CPU的,雖然fp9經過調整迭代標識清除縮減對CPU的佔用,可是消耗依然很大!因此採用了另一種比較消極的處理方法!就是分段執行,每次執行一部分,而後偶爾執行一次。這樣來減少CPU的消耗。因此咱們一般知道,FP九、10的垃圾回收機是偶爾執行的!
3、垃圾回收的函數方法
System.disposeXML()
BitmapData.dispose()
Loader.unloadAndStop()
System.gc() ,這是一個最有用的函數,卻只適用於調試版的FP
removeChild()
removeEventListener()
設置引用爲null
System.totalMemory,返回值是內存佔用字節數,這個跟內存回收沒什麼關係,只是用來查看內存佔用,調試經常使用到
……
以上函數都是垃圾回收會用到的方法,不過通常須要按具體狀況具體去肯定綜合運用幾個方法。這個須要你真正理解FP的內存回收機制纔會懂得如何運用。
(有部份內容參考了網上的一些文章,不能一一列舉,望原做者見諒)
推薦:
==================================================
做者:綠色花園