盡可能使用局部變量
調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧中速度較快啸盏,其他變量,如靜態(tài)變量譬正、實(shí)例變量等宫补,都在堆中創(chuàng)建,速度較慢曾我。另外,棧中創(chuàng)建的變量健民,隨著方法的運(yùn)行結(jié)束抒巢,這些內(nèi)容就沒(méi)了,不需要額外的垃圾回收秉犹。
盡量減少對(duì)變量的重復(fù)計(jì)算
for (int i = 0; i < list.size(); i++){}
改為
int length = list.size();
for (int i = 0; i < list.size(); i++)
這樣蛉谜,在list.size()很大的時(shí)候,就減少了很多的消耗
變量在需要的時(shí)候才創(chuàng)建
String str = "aaa";
if (i == 1){
list.add(str);
}
//建議替換成
if (i == 1){
String str = "aaa"; list.add(str);
}
異常不應(yīng)該用來(lái)控制程序流程
只要有異常拋出崇堵,jvm就會(huì)調(diào)用堆棧型诚,影響效率
不要導(dǎo)入一些不使用的類(lèi)
程序運(yùn)行過(guò)程中避免使用反射
使用數(shù)據(jù)庫(kù)連接池和線(xiàn)程池
這兩個(gè)池都是用于重用對(duì)象的,前者可以避免頻繁地打開(kāi)和關(guān)閉連接鸳劳,后者可以避免頻繁地創(chuàng)建和銷(xiāo)毀線(xiàn)程
不要手動(dòng)調(diào)用System.gc();
使用Entry遍歷Map
Map<String,String> map = new HashMap<>();
for (Map.Entry<String,String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
}
避免使用這種方式
Map<String,String> map = new HashMap<>();
for (String key : map.keySet()) {
String value = map.get(key);
}
因?yàn)槭褂胟eySet遍歷時(shí)狰贯,當(dāng)使用key值取得Map中的Value時(shí),Map又遍歷了一遍。而EntrySe時(shí)涵紊,由于EntrySet本身就是key-value結(jié)構(gòu)傍妒,所以直接將Map的key-value給取出來(lái)了