Work is currently in progress to improve the quality of code generated by the JIT compiler.
Today's optimizer does a poor job of, and has an inability to inline, first class functions and closures. Recent work has started to collect the data needed to do better; optimizationsto exploit it are still to come.
Optimize away unrequired native reference takes and dereferences, including over inlining boundaries.
The not-actually-big-integer case can be inlined into the generated machine code, and various indirections can be eliminated.
Implement escape analysis at bytecode specialization time.
Augment our existing callframe-level JIT, which already supports inlining, with a trace JIT. The trace JIT would be used for loops, replacing the current use of OSR (perhaps OSR remains as a fallback).