概述
早上看到两个文章,关于性能测试的一些争论的。
http://www.mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/
http://stuq.nl/weblog/2009-01-28/why-many-java-performance-tests-are-wrong
在那个例子的结论中,说明iterator是最慢的。根据我的理解,iterator因为做了一些额外的comodification判断,所以应该是性能最差的。
而在后一篇文章中,却反驳了这个结论。
觉得好玩,就拿来自己做了个实验。结果发现了更好玩的事情。
一、测试过程
实验代码如下:
试验方法:分别注释掉其他两个循环部分,每次单独运行一种循环,每种循环方式运行三次,记录其结果。
试验记录:
For:
297, 312, 297
Loop:
297, 296, 297
Iterator:
437, 454, 453
是不是很有趣?
而且,我将三个合在一起计算,也得出了相同的结论,无论iterator放在前面还是后面。
为什么在第二篇文章中说,将iterator放到最后计算就能获得和前两种方式差不多的性能?按照第二篇文章的说法,这与JVM有关,JVM需要进行“Warm up”,那么我们换一个JVM是不是就会有不同呢?
于是,采用-server JVM重新运行,哈,结果真的不同了。
结果变成:For:172, Loop: 156, Iterator: 172
二、试验所得
看以看到,相同的机器,采用不同的JVM,其性能差异还是很大的。(-server jvm加载启动慢,但运行速度快,-client加载启动快,但运行慢)
关于不同jvm的性能问题,请参考官方网站:http://java.sun.com/docs/hotspot/HotSpotFAQ.html
此外,还发现windows xp下jvm最多能使用的内存大概在1200M左右(-Xmx1200m),而linux,能在2400m左右,可能这也是很多服务器要选择用linux的原因。(没试windows server)
不管怎么说,上面的第二篇文章还是给我们一些比较有价值的内容,比如做性能测试时的一些准则:
1、退出其他应用,用一个干净的环境运行被测试代码;
2、多次测试取平均值;
3、关注内存和服务器的使用状况;
4、关注外部系统的依赖和线程锁等问题。
最后
以上就是简单白开水为你收集整理的一个有趣的java性能测试的全部内容,希望文章能够帮你解决一个有趣的java性能测试所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复