Java內存之內存管理的小技巧

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/Julin1214/article/details/51732218
1儘量使用直接量
當需要使用字符串,還有Byte、Short、Integer、Long、Float、Double、Boolean、Character包裝類的實例時,程序不應該採用new的方式來創建對象,而應該直接採用直接量來創建它們。
2使用StringBuilder和Stringbuffer進行字符串連接
String、StringBuilder和StringBuffer都可代表字符串。其中String代表字符串序列不可變的字符串,而StringBuilder和Stringbuffer都代表字符序列可變的字符串。
如果程序使用多個String對象進行字符串連接運算,在運行時將生成大量臨時字符串,這些字符串會保存在內存中從而導致程序性能下降。
3儘早釋放無用對象的引用
大部分的時候,方法局部引用變量所引用的對象會隨着方法結束而變成垃圾,因爲局部變量的生存期限很短,當方法運行結束之時,該方法內部的局部變量就結束了生命期限。因此,大部分時候程序無需將局部、引用變量顯示設爲null.
4.儘量少用靜態變量
最壞的情況是某個對象被static變量所引用,那麼垃圾回收機制通常是不會回收這個對象所佔的內存。
5避免在經常調用的方法、循環中創建Java對象    
經常調用的方法和循環有一個共同特徵,這些代碼段會被多次重複調用。
不斷的分配和回收操作中,程序的性能受到了巨大的影響。
6緩存經常使用的對象
如果有些對象需要被經常使用,可以考慮把這些對象用緩存池保存起來,這樣當下次需要時就直接 拿出這些對象來用。典型的緩存就是數據連接池,數據連接池裏緩存了大量數據庫連接。每次程序需要訪問數據庫時,都可直接取出數據庫連接。
實現緩存通常有兩種方式:
使用HashMap進行緩存。
直接使用某些開源的緩存項目。
如果直接使用hashmap進行緩存,程序員需要手動控制Hashmap容器裏key-value對不至於太多,因爲當key-value太多時將導致HashMap佔用過大的內存,從而導致系統性能下降。
(緩存設計是一種以犧牲系統空間來換取運行時間的技術,不管是哪種緩存實現,都會使用容器來保存已用過的對象,方便下次再用。而這個保存對象的容器將佔據一塊不算太小的內存,如何控制該容器佔用的內存 不至於過大,而該容器又能保留大部分已用過的對象,這就是緩存設計的關鍵
7.儘量不要使用finalize方法
垃圾回收機制,在一個對象失去引用之後,垃圾回收器準備回收該對象之前,垃圾回收機制會先調用該對象的finalize()方法來執行資源清理。實際上,開發者將資源清理放在finalize()方法中完成是非常拙劣的選擇。
8.考慮使用軟引用(softReference)
當程序需要創建長度很大的數組時,可以考慮使用softreference來包裝數組元素,而不是直接讓將數組元素來引用對象。
softReference是個很好的選擇:當內存足夠時,它的功能等同於普通引用;當內存不夠時,它會犧牲自己,釋放軟引用的對象。
使用軟引用來引用對象時不要忘記了軟引用的不確定性。程序通過軟引用所獲取的對象有可能爲null-當系統內存緊張時,softrefernce所引用的Java對象被釋放。由於通過softrefernce獲取的 對象可能爲null,因此應用程序取出softreference所引用的Java之後,應該顯示判斷該對象是否爲null;當該對象爲null時,應重建對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章