I mean, I think that probably is what happens. But then, while it's sped up a lot, the generated bytecode presumably also includes instructions to try the cast and raise that exception when it fails.
(And the possible "JIT hotpath optimization" could be something like, at the bottom level, branch-predicting that cast.)
(And the possible "JIT hotpath optimization" could be something like, at the bottom level, branch-predicting that cast.)