亚洲天堂一级片-亚洲天堂三区-亚洲天堂久久精品成人-亚洲天堂毛片-久久国产欧美日韩高清专区-久久国产欧美日韩精品免费

JAVA編程提高性能時需注意的地方(二)

1.盡量避免不必要的創建

A a = new A();

if(i==1){list.add(a);}

應該改為

if(i==1){

A a = new A();

list.add(a);}

2.盡量在finally塊中釋放資源

程序中使用到的資源應當被釋放,以避免資源泄漏。這最好在finally塊中去做。不管程序執行的結果如何,finally塊總是會執行的,以確保資源的正確關閉。 

3.盡量使用移位來代替'a/b'的操作

"/"是一個代價很高的操作,使用移位的操作將會更快和更有效

int num = a / 4;

int num = a / 8;

應該改為

int num = a >> 2;

int num = a >> 3;

但注意的是使用移位應添加注釋,因為移位操作不直觀,比較難理解

4.盡量使用移位來代替'a*b'的操作

同樣的,對于'*'操作,使用移位的操作將會更快和更有效

int num = a * 4;

int num = a * 8;

應該改為

int num = a << 2;

int num = a << 3;

5.盡量確定StringBuffer的容量

StringBuffer的構造器會創建一個默認大小(通常是16)的字符數組。在使用中,如果超出這個大小,就會重新分配內存,創建一個更大的數組,并將原先的數組復制過來,再丟棄舊的數組。在大多數情況下,你可以在創建 StringBuffer的時候指定大小,這樣就避免了在容量不夠的時候自動增長,以提高性能。

如:StringBuffer buffer = new StringBuffer(1000); 

6.盡量早釋放無用對象的引用

大部分時,方法局部引用變量所引用的對象 會隨著方法結束而變成垃圾,因此,大部分時候程序無需將局部,引用變量顯式設為null

例如:

Public void test(){

Object obj = new Object();

……

Obj=null;

}

上面這個就沒必要了,隨著方法test()的執行完成,程序中obj引用變量的作用域就結束了。但是如果是改成下面:

Public void test(){

Object obj = new Object();

……

Obj=null;

//執行耗時,耗內存操作;或調用耗時,耗內存的方法

……

}

這時候就有必要將obj賦值為null,可以盡早的釋放對Object對象的引用。

7.盡量避免使用二維數組

二維數據占用的內存空間比一維數組多得多,大概10倍以上。

8.盡量避免使用split

除非是必須的,否則應該避免使用splitsplit由于支持正則表達式,所以效率比較低,如果是頻繁的幾十,幾百萬的調用將會耗費大量資源,如果確實需要頻繁的調用split,可以考慮使用apacheStringUtils.split(string,char),頻繁split的可以緩存結果。

9.ArrayList & LinkedList

一個是線性表,一個是鏈表,一句話,隨機查詢盡量使用ArrayListArrayList優于LinkedListLinkedList還要移動指針,添加刪除的操作LinkedList優于ArrayListArrayList還要移動數據,不過這是理論性分析,事實未必如此,重要的是理解好2者得數據結構,對癥下藥。

10.盡量使用System.arraycopy ()代替通過來循環復制數組

System.arraycopy() 要比通過循環來復制數組快的多 

11.盡量緩存經常使用的對象

盡可能將經常使用的對象進行緩存,可以使用數組,或HashMap的容器來進行緩存,但這種方式可能導致系統占用過多的緩存,性能下降,推薦可以使用一些第三方的開源工具,如EhCacheOscache進行緩存,他們基本都實現了FIFO/FLU等緩存算法。

12.盡量避免非常大的內存分配

有時候問題不是由當時的堆狀態造成的,而是因為分配失敗造成的。分配的內存塊都必須是連續的,而隨著堆越來越滿,找到較大的連續塊越來越困難。

13.慎用異常

當創建一個異常時,需要收集一個棧跟蹤(stack track),這個棧跟蹤用于描述異常是在何處創建的。構建這些棧跟蹤時需要為運行時棧做一份快照,正是這一部分開銷很大。當需要創建一個 Exception 時,JVM 不得不說:先別動,我想就您現在的樣子存一份快照,所以暫時停止入棧和出棧操作。棧跟蹤不只包含運行時棧中的一兩個元素,而是包含這個棧中的每一個元素。

如果創建一個 Exception ,就得付出代價。好在捕獲異常開銷不大,因此可以使用 try-catch 將核心內容包起來。從技術上講,甚至可以隨意地拋出異常,而不用花費很大的代價。招致性能損失的并不是 throw 操作——盡管在沒有預先創建異常的情況下就拋出異常是有點不尋常。真正要花代價的是創建異常。幸運的是,好的編程習慣已教會我們,不應該不管三七二十一就拋出異常。異常是為異常的情況而設計的,使用時也應該牢記這一原則。

北大青鳥網上報名
北大青鳥招生簡章
主站蜘蛛池模板: 高清精品女厕在线观看 | 三级精品在线观看 | 91小视频在线观看免费版高清 | 中文字幕亚洲一区二区v@在线 | 亚洲成a人片在线观看中 | 久久99热成人精品国产 | 国产日b视频 | 日本美女一区二区三区 | 毛片在线不卡 | 国产视频成人 | 国产精品黄页在线播放免费 | 国产精品激情丝袜美女 | 欧美亚洲国产人成aaa | 欧美视频在线一区二区三区 | 88av视频在线观看 | 美女张开腿让男人桶的动态图 | 久久久久久全国免费观看 | 日本三级香港三级人妇99 | 国产精品网址 | 一级毛片在播放免费 | 欧美午夜性春猛交 | www成人国产在线观看网站 | 欧美 日韩 国产 在线 | 久久成人综合网 | 欧美激情伦妇在线观看 | 欧美另类性视频在线看 | 性生话一级国产片 | 国产欧美在线观看不卡一 | 国产成人夜间影院在线观看 | 亚洲综合网在线观看首页 | 欧美一级v片 | 久久精品成人欧美大片免费 | 午夜剧场福利社 | 九一国产| 在线亚洲精品国产成人二区 | 国产主播第一页 | 91久久线看在观草草青青 | 一级黄色录像片 | 久久精品国产99久久 | 韩国v欧美v亚洲v日本v | 久草在线2|