A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我该从何说起?下面是一些最该知道的东西。我在一个循环里写了一个计时功能,用来报告每秒钟千次迭代速度(K/sec)和每次迭代所需微秒数(uSecs)。整个测试在Sparc 20上完成,JDK版本为1.1.4,编译器为JIT。随后我注意到了如下信息:

  • 这些实验是在1998年完成的。编译器已经有所变化了。

  • 递减计数要比递增计数快两倍:我的机器可以在一秒钟内递减计数1.44亿次,但递增计数只能完成7200万次。

  • 调用Math.max(a,b)要比(a > b) ? a : b慢七倍,这是由于函数调用引起的。

  • 数组要比Vectors快15到30倍。Hashtable要比Vector快2/3倍。


Bitset.get(i)要比bits & 1 << i慢60倍。这大部分时候是因为函数的同步调用造成的。当然,如果超过了64位,这个测试可能就不准了。


Java编译器在循环中能检测出常量这件事做得并不好。C/Java的for循环是个比较糟糕的概念,因为它大部分时候会重复计算结束条件。比如,for(int i=0; i<str.length(); i++) 要比int len = str.length(); for(int i=0; i<len; i++)慢三倍。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马