一、前言
其實主要就是優(yōu)化算子函數(shù),內(nèi)部使用到局部數(shù)據(jù),或是算子函數(shù)外部數(shù)據(jù)苇羡,都可以進行數(shù)據(jù)結(jié)構(gòu)優(yōu)化,優(yōu)化之后,都會減少其對內(nèi)存的消耗和占用蓝翰。
二、如何優(yōu)化數(shù)據(jù)結(jié)構(gòu)
- 優(yōu)先使用數(shù)組以及字符串,而不是集合類得湘。也就是說優(yōu)先用array,而不是ArrayList、LinkedList顿仇、HashMap等集合淘正。
比如,List<Integer> list = new ArrayList<Integer>(),將其替換為int [] arr = new int[]。這樣的話,array既比List少了額外信息的存儲開銷,還能使用原始數(shù)據(jù)類型(int)來存儲數(shù)據(jù),比List中用Integer這種包裝類型存儲數(shù)據(jù),要節(jié)省內(nèi)存的多臼闻。
通常企業(yè)級應(yīng)用中的做法是,對HashMap鸿吆、List這種數(shù)據(jù),統(tǒng)一用String拼接成特殊格式的字符應(yīng)串,
如Map<Integer,Person> persons = new HashMap<Integer,Person>()∈瞿牛可以優(yōu)化特殊字符串格式:
id:name,address..
- 避免使用多層嵌套的對象結(jié)構(gòu)惩淳。
比如說 public class Teacher{private List<Student> students = new ArrayList<Student>()},可以用json字符串來存儲是一個很好的選擇。
3.對于有些能夠避免場景,盡量使用int代替String乓搬。因為String雖然比ArrayList思犁、HashMap等數(shù)據(jù)結(jié)構(gòu)高效多了,占用內(nèi)存量少多了进肯,但是之前分析過激蹲,還是有額外信息的消耗。比如之前用String表示id江掩,那么現(xiàn)在完全可以用數(shù)字類型的int学辱,來進行替代。這里提醒环形,在spark應(yīng)用中策泣,id就不要用常用的uuid了,因為無法轉(zhuǎn)成int抬吟,就用自增的int類型的id即可萨咕。(sdfsdfdf-234242342-sdfsfsfdfd)