一、前言
其實主要就是優化算子函數,內部使用到局部數據,或是算子函數外部數據,都可以進行數據結構優化,優化之后,都會減少其對內存的消耗和占用。
二、如何優化數據結構
- 優先使用數組以及字符串,而不是集合類。也就是說優先用array,而不是ArrayList、LinkedList、HashMap等集合。
比如,List<Integer> list = new ArrayList<Integer>(),將其替換為int [] arr = new int[]。這樣的話,array既比List少了額外信息的存儲開銷,還能使用原始數據類型(int)來存儲數據,比List中用Integer這種包裝類型存儲數據,要節省內存的多。
通常企業級應用中的做法是,對HashMap、List這種數據,統一用String拼接成特殊格式的字符應串,
如Map<Integer,Person> persons = new HashMap<Integer,Person>()。可以優化特殊字符串格式:
id:name,address..
- 避免使用多層嵌套的對象結構。
比如說 public class Teacher{private List<Student> students = new ArrayList<Student>()},可以用json字符串來存儲是一個很好的選擇。
3.對于有些能夠避免場景,盡量使用int代替String。因為String雖然比ArrayList、HashMap等數據結構高效多了,占用內存量少多了,但是之前分析過,還是有額外信息的消耗。比如之前用String表示id,那么現在完全可以用數字類型的int,來進行替代。這里提醒,在spark應用中,id就不要用常用的uuid了,因為無法轉成int,就用自增的int類型的id即可。(sdfsdfdf-234242342-sdfsfsfdfd)