There's a whole unnecessary reparse and compilation up to bytecode as part of the deoptimizing recompilation pipeline in CompiledFunction.handleRewriteException: FunctionNode fn2 = effectiveOptInfo.reparse(); fn2 = compiler.compile(fn2, CompilationPhases.COMPILE_UPTO_BYTECODE); It's possibly a remnant of some debugging that slipped through unnoticed. This probably almost doubled the deoptimizing recompilation work.