標籤:java 程式開發 開發人員 記憶體 最佳化
1、使用final
在jdk裡面的String類型是final的,所以String裡面的方法也是final的,方法申明成final後java編譯器會尋找機會內聯所有的final方法(至於怎樣內聯由編譯器決定),這樣可以大大提高程式的運行效能。
補充:HotSpot虛擬機器就使用了方法內聯來最佳化虛擬機器的運行效率,另外一種策略是熱點最佳化。
2、將到期引用置為null
當確定一個對象不在使用之後應該將其設定成null,這樣可以加快對象的回收。舉個例子,jdk裡面的棧在出棧後,棧中的對象就成為到期引用,假如不回收這些對象,會隨著頻
繁的入棧和出棧操作,而出現記憶體泄露的問題。
3、及時在finaly裡面關閉資源
(1)IO流不僅在jvm中的記憶體中分配了資源,還在作業系統上分配了資源,jvm可以回收掉在記憶體中分配的資源,但是作業系統上分配的資源沒法回收。所以,需要調用close()方法來回收作業系統的資源。類似的還有Thread和Bitmap(Android中封裝的對象)。
(2)對Bitmap進行操作時,應該及時調用recycle()方法,及時回收資源,避免記憶體溢出。從BitmapFactory(Android中的對象)源碼可以知道Bitmap對象的產生是通過jni技術的,
底層調用了C語言。所以,要回收Bitmap對象,需要recycle方法來釋放C語言那部分代碼所佔用的記憶體,而記憶體回收行程是無法回收那部分記憶體的。
(3)在finally裡面回收,可以保證資源的正確關閉。否則,可能出現資源沒有正確關閉的情況,如出現異常,這樣可能導致資源流失的問題。
4、盡量緩衝經常使用的對象
儘可能使用經常使用的對象進行緩衝,一般使用數組或者HashMap這些容器進行緩衝。這種方式緩衝的時候可能導致系統中佔用過多的緩衝,使得系統效能下降。所以,可以使用一些第三方快取項目,如EhCache和OsCache,這些架構採用了一些緩衝演算法,如FIFO(先進先出演算法)、LRU(Least Recenly Used 最近最少使用演算法)等等。
在自己實現緩衝對象後可能出現一個問題,如使用HashMap緩衝對象,隨著緩衝的對象增多,可能出現記憶體溢出的問題,這個時候可以採用軟引用來避免OOM的問題。而採用緩衝演算法可以解決效能問題。在ImageLoader架構裡面既使用了軟引用技術,又使用了相關緩衝演算法。
java之記憶體最佳化的建議