Java 性能優化(防止內存泄漏)

    垃圾回收器是根據對象被引用數來決定是否回收的,也就是說沒一個對象在內存中都會有一個計數器,保存該對象當前被引用的次數,如果被引用的次數爲0 的時候,垃圾回收器就會選擇一個適當的實際將該對象所佔的內存空間回收,並將該對象釋放,問題就出在這個計數器上,如果該計數器不爲0,也就是說對象仍然會被一次或者多次引用,而我們並沒有意識到這一點,那麼這個引用計數器就永遠不會是0了,就會造成這個對象永遠不會被釋放,從而造成內存泄漏的情況,例子:

    public class stack{

       private Person [] persons;

       private int currentIndex ;

       public Person pop(){

           if(currentIndex == 0)

                 new ThrowException ();

            currentIndex -- ;

            return persons[currentIndex];

       }

    }

    當pop方法直接從persons數組中取出某個位置的Person對象並返回後,person數組中的相應Person對象沒有被釋放,而且在同樣的位置在雅茹新的Person對象的時候,原來的對象就再也沒有被釋放的機會了,這樣Person對象的引用次數至少爲1,而且永遠爲1(Stack 對象被釋放) ,爲了避免這樣的情況的發生,不要直接返回persons數組的Person對象,而要先將Person對象取出,再將persons數組中的相應位置設爲null (引用指針減一)

public Person pop(){

 if(currentIndex == 0)

throw new Exception;

Person  person = persons[currenIndex];

//引用計數減一

persons[currenIndex] == null

return person;

}

 

 

 

}

發佈了8 篇原創文章 · 獲贊 17 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章