一、不要每次都建立一個相同功能的新對象:數據庫
- 極端反例:每次在堆上建立一個對象,第一次會在常量池建立字符串新對象
- 改進後:每次棧上建立引用,第一次會在常量池建立字符串新對象
- 第一次指同一臺虛擬機的第一次
二、靜態工廠優於構造器的很重要緣由:安全
舉例:性能
使用靜態初始化器改進後,性能大幅度提高:優化
- final 靜態域,會被做爲常量使用
- Calendar 建立代價很高
- 能夠進一步優化到延時初始化
- 可是不建議:緣由是方法實現複雜、沒法使性能顯著 提升超過 現有水平
三、像適配器這樣的場景,性能提高不明顯對象
- 適配器把功能委託給後備對象,爲後備對象提供一個能夠替代的接口
- 不須要建立多個適配器實例
四、Map接口的 keySet() 方法每次都返回相同的 Set實例接口
五、自動封裝內存
- 容許基本類型和封裝基本類型混用,自動裝箱 拆箱
- 兩種類型語義上模糊,可是性能上差距明顯
- 優先使用基本類型,避免無心識的自動裝箱
- 每次往Long sum中添加 long 類型時,建立一個Long實例
- 下述代碼把 Long sum 改成long(基本類型)
- 性能從40秒加,減小到6秒加
六、本條並沒有 讓咱們避免建立對象的意思字符串
- 緣由是:小對象的建立和回收一般比較廉價
- 並且,建立附加對象能提高代碼的清晰性、簡潔性和功能性
- 是件好事
七、使用重量級對象時,才建議使用對象池虛擬機
- 典型事例:數據庫鏈接池
- 輕量級對象池得不償失:代碼變亂、增長內存負擔
- JVM優化很容易使 不建立輕量級對象池的性能 優於 建立
八、保護性拷貝<39條>遍歷
- 在重用對象付出的代價遠大於 建立新對象時,保護性拷貝
- 沒進行保護性拷貝,可能致使潛在錯誤或安全漏洞