Blueimp 論壇首頁
  首頁  | 討論區  | 最新話題  | 搜尋  | XML  |  登入
博客來購書 | 《主管這樣帶人就對了!》
貝殼鯨魚兒童程式啟蒙(點我去報名)

此話題中所有文章數: 1 [ 話題狀態: 一般 ]
上一話題 此文章已經觀看 4686 次 而且有 0 篇回應 下一話題
會員大頭照
男寶寶 jieh 《騎士團團長》
文章: 6856
v3.8.8

String VS StringBuffer

盡可能不要用 String + String 請改用 StringBuilder.append(...)
 
public class StringTest {

static void bed(int t) {
String str = "";
for (int i = 0; i < t; i++) {
str += "a";
}
}

static void good(int t) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < t; i++) {
sb.append("a");
}
}

public static void main(String[] args) {
int t = 50000;
System.out.println("****** Bed Testting ******");
long startTime = System.currentTimeMillis();
long startMem = Runtime.getRuntime().freeMemory();

bed(t); // good , bed

long endMem = Runtime.getRuntime().freeMemory();
long endTime = System.currentTimeMillis();

System.out.println("Use memory: " + (startMem - endMem));
System.out.println("Use Time: " + (endTime - startTime));
}

shock 測試結果:
 
 * 2007-11-30 : OS Vista, JDK1.6, CPU intel T7300, RAM DDRII 2G
*
* 10000 次
* String : memory = 312800 bit, time = 192 ms
* StringBuffer : memory = 69152 bit, time = 2 ms
*
* 50000 次
* String : memory = 3288344 bit, time = 6812 ms
* StringBuffer : memory = 290352 bit, time = 6 ms

* *****************************************************
*
* 2003-03-03 : OS winxp, JDK1.4, CPU intel P-M 1.5G, RAM DDR 1G
*
* 10000 次
* String : memory = 153456 bit, time = 811 ms
* StringBuffer : memory = 74128 bit, time = 20 ms
*
* 50000 次
* String : memory = 1172744 bit, time = 49180 ms
* StringBuffer : memory = 295328 bit, time = 50 ms

看一下 50000 次 就非常明顯感覺到他的差異了!
很多人 SQL 都很喜歡用 + 的 把 SQL 加起來
也許你自己一支程式測試一次感覺不出來
但是現在大家都很資深了 眼光不應該如此而已
當很多程式在一個系統正式環境執行難以記數次時 耗費的資源是很大的

java 目前建議以 StringBuilder 取代 StringBuffer 分別用這兩個沒差多少
也有可能是 JDK 有順手偷偷改造 StringBuffer 也許沒有
不想退到 2003 年的環境 知道重點就好 不再多做測試
----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 4 次, 最後修改: jieh 於 2010/5/5 下午 10:39:13]

[2007/11/30 下午 02:06:25]   [返迴此篇文章頂端 ]  回到頂端