As of 0.9.0 and current TRUNK, JRuby still uses the same iter stack/block stack method of managing blocks that C Ruby does. This method, however, has considerable overhead. For making a call, there are as many as three pushes and three pops on each stack, when all that's necessary is passing the block to the method that actually needs it.
The most promising way to fix this would be to pass the block directly to the frame in which it will be called. Some of this work has already started on the cnutter branch.
This task should track the reduction and eventual elimination of the Iter and Block stacks.