內置 map 類型是必須的。首先,該類型使用頻率很高;其次,可藉助 runtime 實現深層次優化(好比說字符串轉換,以及 GC 掃描等)。可儘管如此,也不意味着萬事大吉,依舊有不少需特別注意的地方。函數
map 會按需擴張,但須付出數據拷貝和從新哈希成本。若有可能,應儘量預設足夠容量空間,避免此類行爲發生。性能
從結果看,預設容量的 map 顯然性能更好,更極大減小了堆內存分配次數。優化
對於小對象,直接將數據交由 map 保存,遠比用指針高效。這不但減小了堆內存分配,關鍵還在於垃圾回收器不會掃描非指針類型 key/value 對象。spa
寫個示例對比一下,注意調整 33 行的函數調用。指針
指針模式:對象
值模式:內存
從兩次輸出裏 GC 所佔時間百分比,就可看出 「巨大」 差別。字符串
內置 map 類型是必須的。首先,該類型使用頻率很高;其次
string
很遺憾,map 不會收縮 「再也不使用」 的空間。就算把全部鍵值刪除,它依然保留內存空間以待後用。容器
就算清空了全部數據,空間依舊沒有釋放。解決方法是取消 23 行註釋,或者替換爲一個新的 map 對象。
提示:如長期使用 map 對象(好比用做 cache 容器),偶爾換成 「新的」 或許會更好。還有,int key 要比 string key 更快。