一个有趣的java性能测试

早上看到两个文章,关于性能测试的一些争论的。

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、关注外部系统的依赖和线程锁等问题。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值