Performance matters – 25x for JavaFX script over Groovy and JRuby

how-to
Jan 2, 20091 min

JavaFX script


function tak(x:Number, y:Number, z:Number): Number {
    if (y >= x) z else tak(tak(x-1, y, z),
                           tak(y-1, z, x),
                           tak(z-1, x, y));
}

for (i in [1..1000]) {
    tak(24, 16, 8);
}
time javafx -server -cp . Tak

real    0m10.724s
user    0m10.105s
sys     0m0.173s

Groovy

def tak(double x, double y, double z) {
    return y >= x ? z : tak(tak(x-1, y, z),
                            tak(y-1, z, x),
                            tak(z-1, x, y));
}


int i = 0;
while (i++ < 1000) {
    tak(24, 16, 8);
}
time java -Djava.ext.dirs=./groovy-1.6-RC-1/lib -server groovy.lang.GroovyShell tak.groovy

real    4m36.674s
user    4m29.272s
sys     0m3.842s

JRuby


def tak x, y, z
  unless y < x
    z
  else
    tak( tak(x-1, y, z),
         tak(y-1, z, x),
         tak(z-1, x, y))
  end
end

i = 0
while i<1000
        tak(24, 16, 8)
        i+=1
end
time ./jruby-1.1.6RC1/bin/jruby -J-server tak.rb

real    4m24.735s
user    4m22.203s
sys     0m1.069s

Summary

For this benchmark, as you can see both JRuby and Groovy are around 25x slower than JavaFX script.