java程序性能優(yōu)化之設(shè)計(jì)優(yōu)化--優(yōu)化組件和方法(2)

本篇介紹一些常用的可用于系統(tǒng)性能優(yōu)化的組件和方法

1.緩沖(Buffer)

??????????? 緩沖區(qū)是一塊特定的內(nèi)存區(qū)域,開辟緩沖區(qū)的目的是通過緩解應(yīng)用程序上下層之間的性能差異,提高系統(tǒng)的性能,我們?cè)谌粘I钪凶畛R姷木彌_的例子就是:


?????????? 漏斗上層系統(tǒng)猶如入水口,下層猶如系統(tǒng),倒水猶如向磁盤寫東西,然而瓶口很細(xì),造成了性能瓶頸。所以為了加快速度,可以添加一個(gè)漏斗。漏斗的初始口徑很大,并擁有一定的容量,那么就可以先寫一部分?jǐn)?shù)據(jù)到緩沖區(qū),當(dāng)數(shù)據(jù)都進(jìn)入到緩沖區(qū)后,上次處理完畢,等待下層處理至完成。

????????? 注意:緩沖可以協(xié)調(diào)上層組件和下層組件的性能差,當(dāng)上層組件性能優(yōu)于下層組件時(shí),可以有效減少上層組件對(duì)下層組件的等待時(shí)間。基于這樣的結(jié)構(gòu),上層應(yīng)用組件不需要等待下層組件真實(shí)的接收全部組件,即可返回操作,加快了上層組件的處理速度,從而提高系統(tǒng)整體性能緩沖區(qū)最常用的場(chǎng)景就是IO流,由于IO操作很容易成為性能瓶頸,因此盡可能在IO讀寫中加入緩沖組建,提升系統(tǒng)性能

2.緩存(Cache)

???????? 緩存也是為提升系統(tǒng)性能而開辟的內(nèi)存空間,緩存的主要作用就是暫存數(shù)據(jù)處理結(jié)果,并提供下次訪問,在很多場(chǎng)合中,數(shù)據(jù)的處理或數(shù)據(jù)的獲取都可能會(huì)非常耗時(shí),當(dāng)數(shù)據(jù)請(qǐng)求量很大時(shí),頻繁的數(shù)據(jù)處理會(huì)耗盡CPU資源,緩存的作用就是將這些數(shù)據(jù)處理結(jié)果緩存起來,當(dāng)又其它線程或客戶端要查詢相同資源時(shí),可以省略對(duì)這些數(shù)據(jù)的處理流程,直接從緩存中取出處理結(jié)果,并返回給請(qǐng)求組件,從而提高系統(tǒng)的響應(yīng)時(shí)間。

????????? 最簡(jiǎn)單的緩存可以直接用HashMap實(shí)現(xiàn),當(dāng)然會(huì)遇到很多問題,比如什么時(shí)候清除不用的緩存數(shù)據(jù),如何防止緩存數(shù)據(jù)過多而導(dǎo)致內(nèi)存溢出等,當(dāng)然也可用WeakHashMap這個(gè)弱引用來維護(hù),從而降低了潛在的內(nèi)存溢出,然而對(duì)比與專業(yè)的緩存還是不足。目前又很多基于java的緩存框架,比如出自Hibernate的EHCache,它是Hibernate默認(rèn)的數(shù)據(jù)緩存方案;除此之外還有OSCache,JBossCache等。

3.對(duì)象復(fù)用--池

?????????? 對(duì)象復(fù)用是目前常用的一種系統(tǒng)優(yōu)化方式,核心思想即:如果一個(gè)類被頻繁的請(qǐng)求使用,那么不必每次都生成一個(gè)實(shí)例,可以將這個(gè)類的一些實(shí)例保存在一個(gè)“池”中,等需要時(shí)直接從池中取出。這個(gè)池就稱為對(duì)象池。實(shí)現(xiàn)上,它可能是一個(gè)數(shù)組,鏈表或者集合對(duì)象池運(yùn)用很廣,比如我們常用的線程池和數(shù)據(jù)庫(kù)連接池。

??????????? 線程池中保存著可以被重用的線程對(duì)象,當(dāng)有任務(wù)被提交到線程池的時(shí)候,系統(tǒng)并不需要再新建一個(gè)線程,而是直接從池中取出一個(gè)可用線程,執(zhí)行這個(gè)任務(wù),在任務(wù)結(jié)束后,再將這個(gè)線程對(duì)象返回到線程池中而不用關(guān)閉。由于線程的創(chuàng)建和銷毀很耗性能,所以采用這種方式可以有效的改善性能。

?????????? 數(shù)據(jù)庫(kù)連接池,它用于維護(hù)數(shù)據(jù)庫(kù)鏈接的集合,當(dāng)系統(tǒng)需要訪問數(shù)據(jù)庫(kù)時(shí)不需要重新簡(jiǎn)歷數(shù)據(jù)庫(kù)連接,可以直接從池中獲取,在數(shù)據(jù)庫(kù)操作完成時(shí)也不用關(guān)閉,直接返回到連接池中,由于數(shù)據(jù)庫(kù)的創(chuàng)建和銷毀是重量級(jí)操作,因此,避免這兩個(gè)重復(fù)頻繁的操作,對(duì)改善系統(tǒng)性能也很有意義。目前較為廣泛的數(shù)據(jù)庫(kù)連接池組件又C3P0和Proxool。注意:在程序中使用線程池和數(shù)據(jù)庫(kù)連接池,可以有效的改善系統(tǒng)在高并發(fā)下的性能,任何對(duì)性能敏感的系統(tǒng),都要考慮合理的配置這兩個(gè)組件。

4.并行替代串行

????????? 隨著多核時(shí)代的到來,cpu的并行能力有了很大的提升,在這種背景下,傳統(tǒng)的串行程序已經(jīng)無法發(fā)揮出cpu的性能,造成系統(tǒng)資源浪費(fèi),因此并行軟件開發(fā)可將cpu性能發(fā)揮出來java對(duì)多線程的支持為多核計(jì)算提供了保障。java中提供的Thread對(duì)象和Runnable接口用于創(chuàng)建進(jìn)程內(nèi)對(duì)象。其次,為了優(yōu)化程序性能,jdk還提供了java.util.concurrent并發(fā)包,內(nèi)置各種多線程性能優(yōu)化工具和組件,如線程池,各種并發(fā)數(shù)據(jù)結(jié)構(gòu)。

5.負(fù)載均衡

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,964評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,554評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,918評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,093評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,342評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評(píng)論 1 289
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,839評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,107評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,726評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,681評(píng)論 25 708
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,328評(píng)論 11 349
  • 沒有365??24帶孩子的人,別嚷嚷工作比看孩子還累。只有想象,哪里有什么感同身受。 長(zhǎng)時(shí)間沒有自我的生活的確會(huì)有...
    西紅柿的小花園閱讀 258評(píng)論 0 0
  • 寒食季,連續(xù)第三年回老家!只因老父三年前微笑著遠(yuǎn)走異域…只因哥嫂越發(fā)樸實(shí)與慈祥! 指縫間勾勒出美麗圖案,那可是兄弟...
    成語(yǔ)垅閱讀 390評(píng)論 1 1