|
jieh
《騎士團團長》
文章: 6878
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)); } |
測試結果:
| * 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]
|
|