1. 程式人生 > >Spark優化(九):優化資料結構

Spark優化(九):優化資料結構

優化資料結構

Java中,有三種類型比較耗費記憶體:

 

  • 物件,每個Java物件都有物件頭、引用等額外的資訊,因此比較佔用記憶體空間。

  • 字串,每個字串內部都有一個字元陣列以及長度等額外資訊。

  • 集合型別,比如HashMap、LinkedList等,因為集合型別內部通常會使用一些內部類來封裝集合元素,比如Map.Entry。

 

因此Spark官方建議,在Spark編碼實現中,特別是對於運算元函式中的程式碼,儘量不要使用上述三種資料結構,儘量使用字串替代物件,使用原始型別(比如Int、Long)替代字串,使用陣列替代集合型別,這樣儘可能地減少記憶體佔用,從而降低GC頻率,提升效能。


但在實踐中,我們往往會發現,要做到該原則其實並不容易。因為我們同時要考慮到程式碼的可維護性,如果一個程式碼中,完全沒有任何物件抽象,全部是字串拼接的方式,那麼對於後續的程式碼維護和修改,無疑是一場巨大的災難。

 

同理,如果所有操作都基於陣列實現,而不使用HashMap、LinkedList等集合型別,那麼對於我們的編碼難度以及程式碼可維護性,也是一個極大的挑戰。

 

所以,可以在可能以及合適的情況下,使用佔用記憶體較少的資料結構,但是前提是要保證程式碼的可維護性。