But in cases of needless virtual calls (doesn't Java default to virtual for some strange reason?) it may be a quick and easy win.
Additionally, it's not always so easy to drop to a low-level language. If your architecture is enormous and complicated, it might be totally unfeasible to change languages for hot parts.