您的位置:首页 > 编程语言 > Java开发

Java性能垫底的真相(别的测试你都…

2017-04-21 10:52 183 查看
本来想搜搜几个主流web语言性能对比,结果看到一这……
Java, Python, Ruby, PHP, C等语言性能对比
还有这:
Java, Python, Ruby, PHP, C等语言性能对比

于是java都说了不要用String,大字符串拼接啥的要用StringBuilder,然后你不用你觉得你公平吗?测出个Java垫底?搞笑么?然后其它语言除了少数几个没库函数的,全都用库函数了。你确保它库函数没用c重新写过?




你跟我说Java拼个字符串然后改改,512Kb跑个2分半???分钟?!?!?!
让我来告诉你用StringBuilder跑多少:

exec.tm.sec
str.length
allocated memory
free memory
memory used
0
0
251392
247459
3932
2.16sec
256kb
251392
246595
4796
9.225sec
512kb
251392
245443
5948
20.311sec
768kb
251392
243139
8252
34.839sec
1024kb
251392
243139
8252
55.677sec
1280kb
251392
238531
12860
81.251sec
1536kb
251392
238531
12860
109.672sec
1792kb
251392
238531
12860
142.703sec
2048kb
251392
238531
12860
182.189sec
2304kb
251392
229315
22076
225.798sec
2560kb
251392
229315
22076
276.885sec
2816kb
251392
229315
22076
331.923sec
3072kb
251392
229315
22076
389.613sec
3328kb
251392
229315
22076
444.066sec
3584kb
251392
229315
22076
513.889sec
3840kb
251392
229315
22076
587.399sec
4096kb
251392
229315
22076
对比以下原来用String的情况:

exec.tm.sec
str.length
allocated memory
free memory
memory used
0
0
251392
247459
3932
28.919sec
256kb
477696
467656
10039
116.324sec
512kb
602112
548450
53661
262.019sec
768kb
521216
287013
234202
469.951sec
1024kb
670720
66472
604247
740.071sec
1280kb
555520
475447
80072
1071.434sec
1536kb
557568
341309
216258
1450.585sec
1792kb
486400
82785
403614
1841.962sec
2048kb
1429504
668504
760999
2285.005sec
2304kb
360960
281490
79469
可以看到用String来拼接的时候,确实很慢:
512kb用了1分56.324秒,1024kb用了7分49.951秒
对比用了StringBuilder的情况:
512kb用了  9.225秒, 1024kb用了  34.839秒
用String这样拼接再replaceAll,时间整整是StringBuilder的10倍。

所以以后拼接并替换字符串,请这么用:

int i=0;
int lngth;
StringBuilder gstr1=new
StringBuilder();
String oldStr =
"efgh";
String newStr =
"____";
int oldLen =
oldStr.length();
int newLen =
newStr.length();
int index;
while (i++ < imax + 1000)
{
 
  gstr1.append(str);
 
  index = gstr1.indexOf(oldStr);
 
  while (index > -1) {
 
     
gstr1.delete(index, index + oldLen);
 
     
gstr1.insert(index, newStr);
 
      index =
gstr1.indexOf(oldStr, index + newLen);
 
  }
 
  lngth = str.length() * i;
 
  if ((lngth % (1024 * 256)) == 0) {
 
     
System.out.print(((System.currentTimeMillis() - time) / 1000.0) +
"sec\t\t" + lngth / 1024 + "kb\t\t");
 
     
System.out.println(runtime.totalMemory() / 1024 + ":" +
runtime.freeMemory() / 1024 + ":" + (runtime.totalMemory() -
runtime.freeMemory()) / 1024);
 
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: