第83條 慎用延遲初始化
延遲初始化降低了初始化類或者創(chuàng)建實(shí)例的開銷,卻增加了訪問被延遲初始化的域的開銷
在大多數(shù)情況下,正常的初始化要優(yōu)先于延遲初始化
-
如果出于性能的考慮而需要對靜態(tài)域使用延遲初始化,就使用 lazy initialization holder class 用法
private static class FieldHolder { static final FieldType field = computeFieldValue(); } private static FieldType getField() { return FieldHolder.field; }
思考
- 延遲初始化有點(diǎn)像單例模式。目前來看最推薦的實(shí)現(xiàn)單例模式的方法就是使用枚舉。當(dāng)然全局來考慮的話,最優(yōu)的方式還是直接正常初始化類比較好。如果非要使用延遲初始化,可以考慮使用枚舉
第84條 不要依賴于線程調(diào)度器
- 任何依賴于線程調(diào)度器來達(dá)到正確性或者性能要求的程序,很有可能都是不可移植的
- 編寫健壯,響應(yīng)迅速的可移植程序的最佳方法是確??蛇\(yùn)行線程的平均數(shù)量不會(huì)明顯大于處理器數(shù)量
- 如果線程沒有在做有意義的工作,就不應(yīng)該運(yùn)行
- 線程優(yōu)先級(jí)是 Java 平臺(tái)上最不可移植的特征了
思考
- 依賴線程調(diào)度器就是在依賴JVM,這其實(shí)是很容易出問題的,一般也不會(huì)有人這么用