Mike McKinney wrote:
I'll take a look at the benchmarks again (it's been a while)
I know getting a JVM dynlang to compete with the native impl times
from the command line is not going to happen without outside
intervention, just thought it was interesting to see the numbers
compared to other languages on the JVM.
On trunk, one feature that helps this is the addition of NailGun. If you
check out trunk, there's an "ant jruby-nailgun" command that allows you
to run with NailGun, an out-of-process persistent JVM.
ant jruby-nailgun
cd tool/nailgun
make
jruby-ng-server # starts up the server
jruby-ng runs JRuby with nailgun.
With a persistent JVM in the background, performance improves substantially:
~/NetBeansProjects/jruby $ jruby-ng-server&
[1] 9840
~/NetBeansProjects/jruby $ NGServer started on all interfaces, port 2113.
~/NetBeansProjects/jruby $ time jruby -e "puts 'here'"
here
real 0m1.719s
user 0m1.625s
sys 0m0.160s
~/NetBeansProjects/jruby $ time jruby-ng -e "puts 'here'"
here
real 0m1.638s
user 0m0.007s
sys 0m0.012s
~/NetBeansProjects/jruby $ time jruby-ng -e "puts 'here'"
here
real 0m0.140s
user 0m0.006s
sys 0m0.010s
~/NetBeansProjects/jruby $ time jruby-ng -e "puts 'here'"
here
real 0m0.090s
user 0m0.006s
sys 0m0.011s
~/NetBeansProjects/jruby $ time jruby-ng -e "puts 'here'"
here
real 0m0.096s
user 0m0.006s
sys 0m0.010s
That sux about the classloader slowdown (AOT ruby compile).
It's also worth noting that the same techniques causing startup slowdown
in general are also why we're faster than Groovy on most benchmarks (at
least all benchmarks I've tried, sans regexp benchmarks which have a
soon-to-be-fixed bottleneck).
improvement in times with -J-Xverify:none (adding -C didn't really
make a difference)
went from: 0m1.668s
to: 0m1.268s
Pretty substantial.
-J-Djruby.reflection=true option causes NPE for me
Exception in thread "main" java.lang.NullPointerException
at org.jruby.RubyModule.defineAnnotatedMethod(RubyModule.java:511)
at org.jruby.RubyModule.defineAnnotatedMethods(RubyModule.java:458)
at org.jruby.RubyKernel.createKernelModule(RubyKernel.java:84)
at org.jruby.Ruby.initCoreClasses(Ruby.java:1279)
at org.jruby.Ruby.init(Ruby.java:1171)
at org.jruby.Ruby.newInstance(Ruby.java:322)
at org.jruby.Main.runInterpreter(Main.java:168)
at org.jruby.Main.run(Main.java:117)
at org.jruby.Main.main(Main.java:92)
Too tired to look into why right now...
Was this with 1.0.2? It was broken and unsupported in 1.0.2. Fixed in
1.1b1 I believe, or for sure on trunk.
- Charlie
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email