針對資源受限的 MIDP 裝置,兩項微優化可顯著提升執行速度與降低記憶體壓力。
將 for (int i=0; i<N; i++) 改為 for (int i=N-1; i>=0; i--)。字節碼層面:與 0 比較 (ifgt) 比與常數比較 (if_icmplt) 少一條載入指令。實測 900 萬次空循環:
Normal loop : 2046 ms Optimized loop : 1563 ms (提升 ~24%)
原理:JVM 指令集針對零值比較有專用指令,適用於所有 >、>=、<、<=、!= 與零的比較場景。
String 為不可變對象,s += "x" 每次產生新對象並複製內容。5000 次連接測試:
String : 佔用 231,300 bytes StringBuffer: 佔用 132,300 bytes (減少 ~43%)
代碼對比:
// 低效
String sum = "";
for (int i=0; i<5000; i++) sum = sum + "+" + i;
// 高效
StringBuffer sb = new StringBuffer();
for (int i=0; i<5000; i++) sb.append('+').append(i);
建議:所有循環內字串拼接、頻繁修改字串場景均使用 StringBuffer(單線程)或 StringBuilder(J2SE 5+)。