欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂教你java性能優(yōu)化技巧

2018-08-06 09:07:19 1120瀏覽

很多懂java或者參加過java培訓(xùn)的同學(xué)都知道,Java的一些性能是可以優(yōu)化的,本文呢綜合了各種Java性能優(yōu)化的研究成果,涵蓋從JDK到Java集合使用、場景用例到和工具。希望對同學(xué)們有幫助.



1、如果在靜態(tài)構(gòu)造器中有繁重的計算,也就是耗費CPU的邏輯代碼,請檢查其運行時間是否過度?如果是,將這些邏輯遷移到另外一個單獨的幫助類中。StaticconstructorcodeisnotJIT-optimizedinalotofcases

2、在進行byte[]作為String的構(gòu)造參數(shù)時,需要將byte數(shù)組的一部分做個復(fù)制拷貝,否則,構(gòu)造器會為整個原始緩沖做一個臨時拷貝;試圖避免不必要的內(nèi)存分配,因為在內(nèi)存使用超過1G+以上時會影響程序的性能。

3、變量對于大多數(shù)程序是非常有用的,因為它們縮短了代碼,但是當(dāng)變量的所有成員已經(jīng)確認(rèn)是不變的常量,那么使用預(yù)編譯的數(shù)組替代。

4、盡可能使用StringBuilder替代StringBuffer。

5.使用閃存SSD替代傳統(tǒng)的硬盤HDD,這樣你可以將你的應(yīng)用程序從I/O-bound轉(zhuǎn)變到CPU-bound,這對于設(shè)計到read/write流操作特別有用;現(xiàn)代操作系統(tǒng)都是在后臺寫數(shù)據(jù),不會堵塞你的應(yīng)用,你的寫操作只有在操作系統(tǒng)寫入磁盤的速度慢于你的應(yīng)用產(chǎn)生數(shù)據(jù)的速度時,才會堵塞你的寫操作請求:I/Oboundalgorithms:SSDvsHDD

6.如果你的內(nèi)存中有字符串或帶有String字段的對象的大量集合,在某些情況下,字少10%場景,這些字符串實際上可能會轉(zhuǎn)換為基本類型的值,你可以使用Object字段替代你的String字段,使用其提供的pack/unpack方法在字符串和對象之間來回轉(zhuǎn)換,這樣節(jié)省內(nèi)存。如果你不將字符串轉(zhuǎn)換為基本類型,可以考慮將字符串轉(zhuǎn)為UTF-8的byte[],可以隨時將byte[]轉(zhuǎn)回原始字符串。

7.如果有大量重復(fù)的字符串,使用String.intern()減少內(nèi)存損耗,提高性能:ReducingmemoryusagewithString.intern()、String.interninJava6,7and8-part3、String.interninJava6,7and8-multithreadedaccess

8.嘗試使用Googleprotobuf或類似編碼技術(shù)編碼你整數(shù)數(shù)據(jù),特別是這些數(shù)據(jù)值很小的情況下,這樣你會得到數(shù)據(jù)量大幅度減小后導(dǎo)致的低CPU損耗,能夠幫助你提高每個時間單元中存儲或讀取更多消息數(shù)量。

9.如果使用arraylist/set/map時,其key或值是基本類型,那么使用Trove的maps/sets替代JDKmaps/sets,可以節(jié)省大量內(nèi)存。

10.當(dāng)你的應(yīng)用堆heap大小超過32G時,JVM會切換到64位的對象引用,意味著你的應(yīng)用已經(jīng)結(jié)束了占用更少Heap空間的階段。

11.如果你使用內(nèi)部類,缺省使用靜態(tài)的內(nèi)部類;如果你使用一堆小的集合Collection,那么試試使用java.util.Collections.empty*/singleton*方法實現(xiàn)小集合的內(nèi)存高效率存儲;使用BitSet替代boolean的arrays/lists或一系列integer整數(shù)類型,bitset是內(nèi)存和CPU緩存都很友好。

12.不要在多線程中共享一個java.util.Random實例,將其包裝在ThreadLocal中,Java7中使用java.util.concurrent.ThreadLocalRandom替代java.util.Random。

13.如果你希望有快速的Base64編碼器,使用Java8的java.util.Base64

14.不要使用exception,每個exception啟動需要1毫秒:CreatinganexceptioninJavaisveryslow

15.如果你使用:

if(!set.contains(key))
{
set.add(key);
//someextracodehere
}
直接使用add更快:
if(set.add(key)){
//sameextracodecouldbeaddedhere
}

同樣,contains+remove可以被remove直接替代。

16、使用ByteBuffer替代ByteArrayOutputStream。java.io.ByteArrayOutputStream

18.如果你希望計算幾天這樣的短天數(shù),那么基于int/long進行手工實現(xiàn)會更快些。JSR310-Java8Date/Timelibraryperformance(aswellasJodaTime2.3andj.u.Calendar)

19.使用Matcher和Pattern替代String.matches,split,replaceAll,replaceFirst等方法。Regexp-relatedmethodsofString

好啦,今天的分享就到這里了,如果大家想學(xué)習(xí)更多的話,可以看看我們的視頻課哦


【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】

 

 

查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>

標(biāo)簽: java 性能優(yōu)化

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部