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跑多少:
对比以下原来用String的情况:
可以看到用String来拼接的时候,确实很慢:
512kb用了1分56.324秒,1024kb用了7分49.951秒
对比用了StringBuilder的情况:
512kb用了 9.225秒, 1024kb用了 34.839秒
用String这样拼接再replaceAll,时间整整是StringBuilder的10倍。
所以以后拼接并替换字符串,请这么用:
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 |
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 |
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); } } |
相关文章推荐
- [java]性能测试分析工具EclipseProfiler
- java script 性能测试。my result
- java反射性能测试分析
- java反射性能测试分析
- 一个有趣的java性能测试
- Java列表对象的性能分析和测试
- Java 7新特性及简单性能对比测试
- 使用开源的Profiler来测试你的Java应用程序的性能
- 使用开源的Profiler来测试你的Java应用程序的性能
- JAVA反射性能测试及对架构工作的一些思考
- Java列表对象的性能分析和测试
- 使用开源的Profiler来测试你的Java应用程序的性能
- 阿翔编程学-Java环境下的Axis与XFire性能测试
- Java列表对象的性能分析和测试
- 使用开源的Profiler来测试你的Java应用程序的性能
- java环境下的axis与xfire性能测试数据
- 关于JAVA中线程同步的性能测试
- 使用开源的Profiler来测试你的Java应用程序的性能
- java反射性能测试分析
- (转)Java 7的新功能和Java 1.5,1.6,1.7的性能测试比较