java之記憶體最佳化的建議

來源:互聯網
上載者:User

標籤: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之記憶體最佳化的建議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.