FindBugs 規(guī)則整理:Performance

目前已轉(zhuǎn)至個人博客痹筛,本系列地址:Lam's Blog - Knowledge as Action

BX_BOXING_IMMEDIATELY_UNBOXED

Primitive value is boxed and then immediately unboxed
對原始值進(jìn)行裝箱横朋,然后立即取消裝箱适肠。這可能是在一個未要求裝箱的地方進(jìn)行了手動裝箱,從而迫使編譯器進(jìn)行立即撤消裝箱的操作

BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION

Primitive value is boxed then unboxed to perform primitive coercion
對原始值進(jìn)行裝箱然后立即把它強(qiáng)制轉(zhuǎn)換為另外一種原始類型屎慢。例如:
new Double(d).intValue()應(yīng)該直接進(jìn)行強(qiáng)制轉(zhuǎn)換例如:(int) d

DM_BOXED_PRIMITIVE_TOSTRING

Method allocates a boxed primitive just to call toString
僅僅為了調(diào)用封裝類的toString()而對原始類型進(jìn)行封裝操作蒿往。比這種方法更有效的是調(diào)用封裝類的toString(…)方法例如:
new Integer(1).toString() 替換為 Integer.toString(1)
new Long(1).toString() 替換為 Long.toString(1)
new Float(1.0).toString() 替換為 Float.toString(1.0)
new Double(1.0).toString() 替換為 Double.toString(1.0)
new Byte(1).toString() 替換為 Byte.toString(1)
new Short(1).toString() 替換為 Short.toString(1)
new Boolean(true).toString() 替換為 Boolean.toString(true)

DM_FP_NUMBER_CTOR

Method invokes inefficient floating-point Number constructor; use static valueOf instead
使用new Double(double)方法總是會創(chuàng)建一個新的對象杉畜,然而使用Double.valueOf(double)方法可以把值保存在編輯器或者class library、JVM中蹭秋。使用存儲值的方式來避免對象的分配可以或得更好的代碼性能
除非類必須符合Java 1.5以前的JVM扰付,否則請使用自動裝箱或valueOf()方法創(chuàng)建Double和Float實例。

DM_NUMBER_CTOR

Method invokes inefficient Number constructor; use static valueOf instead
使用new Integer(int)方法總是會創(chuàng)建一個新的對象感凤,然而使用Integer.valueOf(int)方法可以把值保存在編輯器或者class library悯周、JVM中。使用存儲值的方式來避免對象的分配可以或得更好的代碼性能
除非類必須符合Java 1.5以前的JVM陪竿,否則請使用自動裝箱或valueOf()方法創(chuàng)建Long, Integer, Short, Character, Byte實例禽翼。

DMI_BLOCKING_METHODS_ON_URL

The equals and hashCode methods of URL are blocking
使用equals和hashCode方法來對url進(jìn)行資源標(biāo)識符解析時會引起堵塞屠橄。考慮使用java.net.URI來代替闰挡。

DMI_COLLECTION_OF_URLS

Maps and sets of URLs can be performance hogs
方法或者字段使用url的map/set集合锐墙。因為equals方法或者h(yuǎn)ashCode方法來進(jìn)行資源標(biāo)識符解析時都會引起堵塞〕ば铮考慮使用java.net.URI來代替溪北。

DM_BOOLEAN_CTOR

Method invokes inefficient Boolean constructor; use Boolean.valueOf(...) instead
使用new方法創(chuàng)建一個java.lang.Boolean類型能夠的實例對象是浪費空間的,因為Boolean對象是不可變的而且只有兩個有用的值夺脾。使用Boolean.valueOf()或者Java1.5中的自動裝箱功能來創(chuàng)建一個Boolean實例之拨。

DM_GC

Explicit garbage collection; extremely dubious except in benchmarking code
在代碼中顯式的調(diào)用垃圾回收命名,這樣做并不能起作用咧叭。在過去蚀乔,有人在關(guān)閉操作或者finalize方法中調(diào)用垃圾回收方法導(dǎo)致了很多的性能浪費。這樣大規(guī)姆撇纾回收對象時會造成處理器運行緩慢吉挣。

DM_NEXTINT_VIA_NEXTDOUBLE

Use the nextInt method of Random rather than nextDouble to generate a random integer
如果r是一個java.util.Random對象,你可以使r.nextInt(n)生成一個0到n-1之前的隨機(jī)數(shù)婉弹,而不是使用(int)(r.nextDouble() * n)

DM_STRING_CTOR

Method invokes inefficient new String(String) constructor
使用java.lang.String(String)構(gòu)造函數(shù)會浪費內(nèi)存因為這種構(gòu)造方式和String作為參數(shù)在功能上容易混亂睬魂。只是使用String直接作為參數(shù)的形式

DM_STRING_TOSTRING

Method invokes toString() method on a String
調(diào)用String.toString()是多余的操作,只要使用String就可以了镀赌。

DM_STRING_VOID_CTOR

Method invokes inefficient new String() constructor
使用沒有參數(shù)的構(gòu)造方法去創(chuàng)建新的String對象是浪費內(nèi)存空間的氯哮,因為這樣創(chuàng)建會和空字符串“”混淆。Java中保證完成相同的構(gòu)造方法會產(chǎn)生描繪相同的String對象佩脊。所以你只要使用空字符串來創(chuàng)建就可以了蛙粘。

ITA_INEFFICIENT_TO_ARRAY

Method uses toArray() with zero-length array argument
當(dāng)使用集合的toArray()方法時使用數(shù)組長度為0的數(shù)組作為參數(shù)。比這更有效的一種方法是
myCollection.toArray(new Foo[myCollection.size()])威彰,如果數(shù)組的長度足夠大就可以直接把集合中的內(nèi)容包裝到數(shù)組中直接返回從而避免了第二次創(chuàng)建一個新的數(shù)組來存放集合中值出牧。

SBSC_USE_STRINGBUFFER_CONCATENATION

Method concatenates strings using + in a loop
在循環(huán)中構(gòu)建一個String對象時從性能上講使用StringBuffer來代替String對象
例如:
// This is bad String s = ""; for (int i = 0; i < field.length; ++i) { s = s + field[i]; }
// This is better StringBuffer buf = new StringBuffer(); for (int i = 0; i < field.length; ++i) { buf.append(field[i]); } String s = buf.toString();

SS_SHOULD_BE_STATIC

Unread field: should this field be static?
類中所包含的final屬性字段在編譯器中初始化為靜態(tài)的值⌒危考慮在定義時就把它定義為static類型的舔痕。

UM_UNNECESSARY_MATH

Method calls static Math class method on a constant value
在方法中使用了java.lang.Math的靜態(tài)方法代替常量來使用,使用常量速度和準(zhǔn)確度會更好豹缀。 以下為Math中的方法產(chǎn)生的值伯复。
Method Parameter abs -any- acos 0.0 or 1.0 asin 0.0 or 1.0 atan 0.0 or 1.0 atan2 0.0 cbrt 0.0 or 1.0 ceil -any- cos 0.0 cosh 0.0 exp 0.0 or 1.0 expm1 0.0 floor -any- log 0.0 or 1.0 log10 0.0 or 1.0 rint -any- round -any- sin 0.0 sinh 0.0 sqrt 0.0 or 1.0 tan 0.0 tanh 0.0 toDegrees 0.0 or 1.0 toRadians 0.0

UPM_UNCALLED_PRIVATE_METHOD

Private method is never called
定義為Private類型方法從未被調(diào)用,應(yīng)該被刪除邢笙。

URF_UNREAD_FIELD

Unread field
類中定義的屬性從未被調(diào)用啸如,建議刪除。

UUF_UNUSED_FIELD

Unused field
類中定義的屬性從未被使用氮惯,建議刪除叮雳。

WMI_WRONG_MAP_ITERATOR

Inefficient use of keySet iterator instead of entrySet iterator
當(dāng)方法中接受一個Map類型的參數(shù)時想暗,使用keySet的迭代器比使用entrySet的迭代器效率要高。

DM_BOXED_PRIMITIVE_FOR_PARSING

A boxed primitive is created from a String, just to extract the unboxed primitive value. It is more efficient to just call the static parseXXX method.
不需要使用封裝/反封裝來解析一個基本類型帘不,使用parseXXX效率更高

其他文章(持續(xù)更新)

FindBugs:簡介與使用
FindBugs 規(guī)則整理:CORRECTNESS
FindBugs 規(guī)則整理:Bad Practice
FindBugs 規(guī)則整理:Style & Dodgy
FindBugs 規(guī)則整理:Malicious Code Vulnerability
FindBugs 規(guī)則整理:Multithreaded Correctness
FindBugs 規(guī)則整理:Internationalization

引用

整合以下文章過程中發(fā)現(xiàn)部分存在翻譯錯誤说莫,已做修正,同時感謝以下文章作者
FindBugs規(guī)則整理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞焙,一起剝皮案震驚了整個濱河市储狭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捣郊,老刑警劉巖辽狈,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呛牲,居然都是意外死亡稻艰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門侈净,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人僧凤,你說我怎么就攤上這事畜侦。” “怎么了躯保?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵旋膳,是天一觀的道長。 經(jīng)常有香客問我途事,道長验懊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任尸变,我火速辦了婚禮义图,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘召烂。我一直安慰自己碱工,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布奏夫。 她就那樣靜靜地躺著怕篷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪酗昼。 梳的紋絲不亂的頭發(fā)上廊谓,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音麻削,去河邊找鬼蒸痹。 笑死春弥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的电抚。 我是一名探鬼主播惕稻,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝙叛!你這毒婦竟也來了俺祠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤借帘,失蹤者是張志新(化名)和其女友劉穎蜘渣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肺然,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蔫缸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了际起。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拾碌。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖街望,靈堂內(nèi)的尸體忽然破棺而出校翔,到底是詐尸還是另有隱情,我是刑警寧澤灾前,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布防症,位于F島的核電站,受9級特大地震影響哎甲,放射性物質(zhì)發(fā)生泄漏蔫敲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一炭玫、第九天 我趴在偏房一處隱蔽的房頂上張望奈嘿。 院中可真熱鬧,春花似錦吞加、人聲如沸指么。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伯诬。三九已至,卻和暖如春巫财,著一層夾襖步出監(jiān)牢的瞬間盗似,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工平项, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赫舒,地道東北人悍及。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像接癌,于是被迫代替她去往敵國和親心赶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理缺猛,服務(wù)發(fā)現(xiàn)缨叫,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 目前已轉(zhuǎn)至個人博客荔燎,本系列地址:Lam's Blog - Knowledge as Action UWF_NULL...
    格子林ll閱讀 30,707評論 0 2
  • Jni數(shù)據(jù)類型 Jni方法 來自 http://blog.chinaunix.net/uid-22028680-i...
    FlyDragonInSky閱讀 915評論 0 0
  • 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法耻姥,而不是構(gòu)造函數(shù)創(chuàng)建對象:僅僅是創(chuàng)建對象的方法,并非Fa...
    孫小磊閱讀 1,986評論 0 3
  • 昨天有咨,彥蕊似乎又遭遇了打擊琐簇。正好是專場,她就在群里叨叨座享,傾訴了很久婉商。 她在群里叨叨之前,先跟她的閨蜜哭訴了一中午渣叛。...
    真冉閱讀 364評論 0 0