高效Java第五條避免創(chuàng)建不必要的對(duì)象影響代碼風(fēng)格和性能

本文雖然說(shuō)要重用對(duì)象菇爪,但是如果創(chuàng)建對(duì)象的代價(jià)不是很大,其實(shí)并不在意是否重用對(duì)象柒昏;而且本文提到的內(nèi)容也主要是如何避免無(wú)謂的重復(fù)創(chuàng)建對(duì)象凳宙。

最好重用對(duì)象

最好能重用對(duì)象,而不是在每次需要的時(shí)候創(chuàng)建一個(gè)相同功能的新對(duì)象职祷。
重用方式既快速氏涩,又流行。
如果對(duì)象是不可變的有梆,它就始終可以被重用是尖。

下面的版本可以保證對(duì)于所有在同一臺(tái)虛擬機(jī)中運(yùn)行的代碼,只要它們包含相同的字符串字面常量泥耀,該對(duì)象就會(huì)被重用饺汹。


同時(shí)提供靜態(tài)工廠方法和構(gòu)造函數(shù)的不可變類

最好使用靜態(tài)工廠方法而不是構(gòu)造函數(shù),以避免創(chuàng)建不必要的對(duì)象痰催。Boolean.valueOf(String)優(yōu)于Boolean(String)兜辞。
構(gòu)造函數(shù)在每次被調(diào)用時(shí)都會(huì)創(chuàng)建一個(gè)新的對(duì)象,而靜態(tài)工廠方法則從來(lái)不會(huì)這樣做陨囊。

重用那些已知不會(huì)被修改的可變對(duì)象

除了重用不可變的對(duì)象之外弦疮,也可以重用那些已知不會(huì)被修改的可變對(duì)象。

正確做法:

如果Person類被實(shí)例化后蜘醋,isBabyBoomer方法卻永遠(yuǎn)不會(huì)被調(diào)用胁塞,那就沒(méi)有必要初始化BOOM_STARTBOOM_END域。通過(guò)延遲初始化压语,有可能消除這些不必要的初始化工作啸罢,但是不建議這樣做。這樣做會(huì)使方法的實(shí)現(xiàn)更加復(fù)雜胎食,卻無(wú)法將性能顯著提高到超過(guò)已經(jīng)達(dá)到的水平扰才。

不要?jiǎng)?chuàng)建多個(gè)適配器對(duì)象

適配器也叫做視圖。
適配器:它把功能委托給一個(gè)后備對(duì)象厕怜,從而為后備對(duì)象提供一個(gè)可以代替的接口衩匣。由于適配器除了后備對(duì)象之外蕾总,沒(méi)有其他的狀態(tài)信息,所以針對(duì)某個(gè)給定對(duì)象的特定適配器而言琅捏,它不需要?jiǎng)?chuàng)建多個(gè)適配器實(shí)例生百。

Map接口的keySet方法返回該Map對(duì)象的Set視圖。對(duì)于一個(gè)給定的Map對(duì)象柄延,實(shí)際上每次調(diào)用keySet都返回相同的Set實(shí)例蚀浆。返回的Set實(shí)例是可變的。

創(chuàng)建多余對(duì)象的新方法:自動(dòng)裝箱


上面的程序構(gòu)造了大約2^31個(gè)多余的Long實(shí)例搜吧。
要優(yōu)先使用基本類型而不是裝箱基本類型市俊,要當(dāng)心無(wú)意識(shí)的自動(dòng)裝箱。

不必要地創(chuàng)建對(duì)象只會(huì)影響程序的風(fēng)格和性能

通過(guò)創(chuàng)建附加的對(duì)象滤奈,提升程序的清晰性摆昧、簡(jiǎn)潔性和功能性,是好事僵刮。

通過(guò)維護(hù)自己的對(duì)象池來(lái)避免創(chuàng)建對(duì)象并不是一種好的做法据忘,除非池中的對(duì)象是非常重量級(jí)的。
維護(hù)自己的對(duì)象池必定會(huì)把代碼弄得很亂搞糕,同時(shí)增加內(nèi)存占用勇吊,并且還會(huì)損害性能。現(xiàn)在的JVM實(shí)現(xiàn)具有高度優(yōu)化的垃圾回收器窍仰,其性能很容易就會(huì)超過(guò)輕量級(jí)對(duì)象池的性能汉规。
不必要地創(chuàng)建對(duì)象只會(huì)影響程序的風(fēng)格和性能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驹吮,一起剝皮案震驚了整個(gè)濱河市针史,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碟狞,老刑警劉巖啄枕,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異族沃,居然都是意外死亡频祝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)脆淹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)常空,“玉大人,你說(shuō)我怎么就攤上這事盖溺±觳冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵烘嘱,是天一觀的道長(zhǎng)昆禽。 經(jīng)常有香客問(wèn)我蝗蛙,道長(zhǎng),這世上最難降的妖魔是什么为狸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任歼郭,我火速辦了婚禮,結(jié)果婚禮上辐棒,老公的妹妹穿的比我還像新娘。我一直安慰自己牍蜂,他們只是感情好漾根,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著鲫竞,像睡著了一般辐怕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上从绘,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天寄疏,我揣著相機(jī)與錄音,去河邊找鬼僵井。 笑死陕截,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的批什。 我是一名探鬼主播农曲,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驻债!你這毒婦竟也來(lái)了乳规?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤合呐,失蹤者是張志新(化名)和其女友劉穎暮的,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淌实,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冻辩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翩伪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片微猖。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缘屹,靈堂內(nèi)的尸體忽然破棺而出凛剥,到底是詐尸還是另有隱情,我是刑警寧澤轻姿,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布犁珠,位于F島的核電站逻炊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏犁享。R本人自食惡果不足惜余素,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炊昆。 院中可真熱鬧桨吊,春花似錦、人聲如沸凤巨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)敢茁。三九已至佑淀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彰檬,已是汗流浹背伸刃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逢倍,地道東北人捧颅。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓶堕,于是被迫代替她去往敵國(guó)和親隘道。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 一般來(lái)說(shuō)郎笆,最好是重用對(duì)象而不是在每次需要的時(shí)候就創(chuàng)建一個(gè)相同功能的新對(duì)象谭梗。重用方式既更加快速,也更為流行宛蚓。如果對(duì)象...
    Viking_Den閱讀 603評(píng)論 0 1
  • 一般來(lái)說(shuō)激捏,最好能重用對(duì)象而不是在每次需要的時(shí)候就創(chuàng)建一個(gè)相同功能的新對(duì)象。重用的方式即快速凄吏,又流行远舅。如果對(duì)象是不可...
    Ruheng閱讀 1,713評(píng)論 0 6
  • 一般來(lái)說(shuō),最好能重用對(duì)象而不是在每次需要的時(shí)候就創(chuàng)建一個(gè)相同功能的新對(duì)象痕钢。重用方式既快速图柏,又流行。如果對(duì)象是不可變...
    徐大力Bear閱讀 231評(píng)論 0 0
  • 人生寂寞如霜雪任连, 空看明月照青天蚤吹。 長(zhǎng)河入海東流去, 白云隨風(fēng)天下移。 我心欲尋舊年影裁着, 對(duì)鏡何曾披舊衣繁涂? 此月曾...
    梅光華閱讀 238評(píng)論 1 0
  • 泰勒早在100多年前說(shuō)過(guò),一個(gè)沒(méi)有度量的體系是很難進(jìn)步的二驰。 設(shè)備管理要進(jìn)步扔罪,其水平也需要度量。在企業(yè)里桶雀,用于度量設(shè)...
    設(shè)備管理大視野閱讀 1,027評(píng)論 0 1