jfbaro: One of the remaining work areas for invokedynamic in OpenJDK is its performance when it hasn't been JIT compiled by the JVM. Currently, JRuby + invokedynamic can be considerably slower when "cold". This is the effect you see above. Obviously we make up for it when the JIT kicks in, but the JVM guys have more work to do on cold and unoptimized performance.

The next big steps for JRuby involve using invokedynamic more and more and reducing the amount of object overhead we require for normal execution (e.g. closures that have heap-based scopes, etc). There's a lot of room to improve.

lest: I will update the benchmark with 1.9.3's numbers in the next few minutes.

There will always be cases where we win or where we lose. Java 7's features have made the win cases more frequent and more impressive. In general if we are slower we consider it a bug and would like bug reports.