日韩不卡免费视频-日韩不卡视频在线-日韩不卡视频在线观看-日韩不卡一二三区-伊人二区-伊人丁香花久久爱综合

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

1.盡量避免不必要的創(chuàng)建

A a = new A();

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

應(yīng)該改為

if(i==1){

A a = new A();

list.add(a);}

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

程序中使用到的資源應(yīng)當(dāng)被釋放,以避免資源泄漏。這最好在finally塊中去做。不管程序執(zhí)行的結(jié)果如何,finally塊總是會(huì)執(zhí)行的,以確保資源的正確關(guān)閉。 

3.盡量使用移位來(lái)代替'a/b'的操作

"/"是一個(gè)代價(jià)很高的操作,使用移位的操作將會(huì)更快和更有效

int num = a / 4;

int num = a / 8;

應(yīng)該改為

int num = a >> 2;

int num = a >> 3;

但注意的是使用移位應(yīng)添加注釋?zhuān)驗(yàn)橐莆徊僮鞑恢庇^,比較難理解

4.盡量使用移位來(lái)代替'a*b'的操作

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

int num = a * 4;

int num = a * 8;

應(yīng)該改為

int num = a << 2;

int num = a << 3;

5.盡量確定StringBuffer的容量

StringBuffer的構(gòu)造器會(huì)創(chuàng)建一個(gè)默認(rèn)大小(通常是16)的字符數(shù)組。在使用中,如果超出這個(gè)大小,就會(huì)重新分配內(nèi)存,創(chuàng)建一個(gè)更大的數(shù)組,并將原先的數(shù)組復(fù)制過(guò)來(lái),再丟棄舊的數(shù)組。在大多數(shù)情況下,你可以在創(chuàng)建 StringBuffer的時(shí)候指定大小,這樣就避免了在容量不夠的時(shí)候自動(dòng)增長(zhǎng),以提高性能。

如:StringBuffer buffer = new StringBuffer(1000); 

6.盡量早釋放無(wú)用對(duì)象的引用

大部分時(shí),方法局部引用變量所引用的對(duì)象 會(huì)隨著方法結(jié)束而變成垃圾,因此,大部分時(shí)候程序無(wú)需將局部,引用變量顯式設(shè)為null

例如:

Public void test(){

Object obj = new Object();

……

Obj=null;

}

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

Public void test(){

Object obj = new Object();

……

Obj=null;

//執(zhí)行耗時(shí),耗內(nèi)存操作;或調(diào)用耗時(shí),耗內(nèi)存的方法

……

}

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

7.盡量避免使用二維數(shù)組

二維數(shù)據(jù)占用的內(nèi)存空間比一維數(shù)組多得多,大概10倍以上。

8.盡量避免使用split

除非是必須的,否則應(yīng)該避免使用splitsplit由于支持正則表達(dá)式,所以效率比較低,如果是頻繁的幾十,幾百萬(wàn)的調(diào)用將會(huì)耗費(fèi)大量資源,如果確實(shí)需要頻繁的調(diào)用split,可以考慮使用apacheStringUtils.split(string,char),頻繁split的可以緩存結(jié)果。

9.ArrayList & LinkedList

一個(gè)是線(xiàn)性表,一個(gè)是鏈表,一句話(huà),隨機(jī)查詢(xún)盡量使用ArrayListArrayList優(yōu)于LinkedListLinkedList還要移動(dòng)指針,添加刪除的操作LinkedList優(yōu)于ArrayListArrayList還要移動(dòng)數(shù)據(jù),不過(guò)這是理論性分析,事實(shí)未必如此,重要的是理解好2者得數(shù)據(jù)結(jié)構(gòu),對(duì)癥下藥。

10.盡量使用System.arraycopy ()代替通過(guò)來(lái)循環(huán)復(fù)制數(shù)組

System.arraycopy() 要比通過(guò)循環(huán)來(lái)復(fù)制數(shù)組快的多 

11.盡量緩存經(jīng)常使用的對(duì)象

盡可能將經(jīng)常使用的對(duì)象進(jìn)行緩存,可以使用數(shù)組,或HashMap的容器來(lái)進(jìn)行緩存,但這種方式可能導(dǎo)致系統(tǒng)占用過(guò)多的緩存,性能下降,推薦可以使用一些第三方的開(kāi)源工具,如EhCacheOscache進(jìn)行緩存,他們基本都實(shí)現(xiàn)了FIFO/FLU等緩存算法。

12.盡量避免非常大的內(nèi)存分配

有時(shí)候問(wèn)題不是由當(dāng)時(shí)的堆狀態(tài)造成的,而是因?yàn)榉峙涫≡斐傻摹7峙涞膬?nèi)存塊都必須是連續(xù)的,而隨著堆越來(lái)越滿(mǎn),找到較大的連續(xù)塊越來(lái)越困難。

13.慎用異常

當(dāng)創(chuàng)建一個(gè)異常時(shí),需要收集一個(gè)棧跟蹤(stack track),這個(gè)棧跟蹤用于描述異常是在何處創(chuàng)建的。構(gòu)建這些棧跟蹤時(shí)需要為運(yùn)行時(shí)棧做一份快照,正是這一部分開(kāi)銷(xiāo)很大。當(dāng)需要?jiǎng)?chuàng)建一個(gè) Exception 時(shí),JVM 不得不說(shuō):先別動(dòng),我想就您現(xiàn)在的樣子存一份快照,所以暫時(shí)停止入棧和出棧操作。棧跟蹤不只包含運(yùn)行時(shí)棧中的一兩個(gè)元素,而是包含這個(gè)棧中的每一個(gè)元素。

如果創(chuàng)建一個(gè) Exception ,就得付出代價(jià)。好在捕獲異常開(kāi)銷(xiāo)不大,因此可以使用 try-catch 將核心內(nèi)容包起來(lái)。從技術(shù)上講,甚至可以隨意地拋出異常,而不用花費(fèi)很大的代價(jià)。招致性能損失的并不是 throw 操作——盡管在沒(méi)有預(yù)先創(chuàng)建異常的情況下就拋出異常是有點(diǎn)不尋常。真正要花代價(jià)的是創(chuàng)建異常。幸運(yùn)的是,好的編程習(xí)慣已教會(huì)我們,不應(yīng)該不管三七二十一就拋出異常。異常是為異常的情況而設(shè)計(jì)的,使用時(shí)也應(yīng)該牢記這一原則。

北大青鳥(niǎo)網(wǎng)上報(bào)名
北大青鳥(niǎo)招生簡(jiǎn)章
主站蜘蛛池模板: 国产成人久久综合热 | 亚洲视频三级 | 国产91久久精品 | 欧美日韩国产一区二区三区播放 | 日韩一级特黄毛片在线看 | 亚洲成a人片在线观 | 精品在线播放 | 欧美日韩国产片 | 久久国产成人午夜aⅴ影院 久久国产成人亚洲精品影院老金 | 欧美一级免费在线观看 | 日韩免费观看一级毛片看看 | 久草视频中文在线 | 天海翼精品久久中文字幕 | 浮力影院网站午夜 | 91日本在线精品高清观看 | 久章草在线观看 | 全部孕妇毛片丰满孕妇孕交 | 亚洲综合亚洲综合网成人 | 成人丁香乱小说 | 国产精品福利视频萌白酱 | 久在线观看 | 成人午夜兔费观看网站 | 国产精品自拍亚洲 | jizjiz日本| 国产在线精品一区二区 | 欧美三级在线观看不卡视频 | 午夜久久久久久久 | 久久精品国产99国产精品免费看 | 国产成人综合手机在线播放 | 91精品成人免费国产片 | 日本免费一区尤物 | 99福利资源久久福利资源 | 国产午夜精品久久久久九九 | 欧美在线播放成人免费 | 特级一级全黄毛片免费 | 日韩欧美亚洲每的更新在线 | 99热久久国产精品一区 | 国产玖玖玖精品视频 | 一级特黄国产高清毛片97看片 | 国产手机视频 | 国产精品黄在线观看免费软件 |