JRuby和Ruby性能简单对比
网友说Windows上测试不靠谱, 我于是找了台服务器, 配置是真实的,国内很多互联网公司用呢:
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
测试成绩, JRuby 比 Ruby 快 :math 是 3 倍; string 1.6 倍; init 2.4 倍。
jruby 1.7.11 (1.9.3p392) 2014-02-24 86339bb on Java HotSpot(TM) 64-Bit Server VM 1.7.0_17-b02 [linux-amd64]:
math 709.0 str 5005.0 init 1480.0
ruby 1.8.7 (2011-12-28 patchlevel 357) [x86_64-linux]:
math 2138.454 str 8013.539 init 3694.021
听说Ruby性能有待改进,Java平台上的Ruby又如何呢?于是写了个简单程序测试了一把。结论是, JRuby比Ruby强多了。
这个测试不算太全面,但也足以说明问题了。PS: 我是在Windows 7 64位上测试的。
ruby&jruby 版本:
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
jruby 1.7.12 (1.9.3p392) 2014-04-15 643e292 on Java HotSpot(TM) 64-Bit Server VM 1.7.0_51-b13 [Windows 7-amd64]
JRuby执行1000,0000次的成绩 (毫秒,越小越好):
math 482.0
init 484.0
str 1952.0
Ruby执行1000,0000次的成绩:
math 5090.0
init 3427.0
str 8815.0
加法, JRuby速度是Ruby的10倍, 初始化7倍,字符串拼接4.5倍。
附测试代码:
def test_math(times)
t = 0
for i in (1..times)
t+=i
end
enddef test_str(times)
for i in (1..times)
s = ""
s = s + i.to_s
end
endclass A
enddef test_init(times)
for i in (1..times)
A.new
end
end$test_m = Hash.new
$test_m["math"] = method(:test_math)
$test_m["str"] = method(:test_str)
$test_m["init"] = method(:test_init)$times = ARGV[0].to_i
$test_m.each do |name, m|
start = Time.now
m.call($times)
stop = Time.now
puts "#{name} #{ (stop - start)*1000 }"
end