首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2ME 效能優化:倒序循環與 StringBuffer 降低記憶體佔用

     編輯:Java 相關知識

針對資源受限的 MIDP 裝置,兩項微優化可顯著提升執行速度與降低記憶體壓力。

1. 倒序循環加速

將 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 指令集針對零值比較有專用指令,適用於所有 >、>=、<、<=、!= 與零的比較場景。

2. StringBuffer 替代 String 連接

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+)。

底層原因

  • String 採用 Immutable 模式 保證線程安全與字符串常量池共享。
  • StringBuffer 內部維護可擴展 char 陣列,擴容策略減少複製次數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved