It even says that the byte-code format was specifically designed with JIT compilation in mind:
> The byte code can be
translated on the fly (at runtime) into machine code for the particular CPU the
application is running on. For those used to the normal design of a compiler
and dynamic loader, this is somewhat like putting the final machine code
generator in the dynamic loader.
> The byte code format was designed with this in mind, so the actual process of
generating machine code is generally simple. Reasonably good code is
produced: it does automatic register allocation and the compiler does some
optimization when it produces the bytecode.
The idea that JIT compilation was retroactively bolted onto the Java ecosystem is absurd. Perhaps more than any other technology, Java brought JIT compilation into the mainstream, starting more than 20 years ago.
It even says that the byte-code format was specifically designed with JIT compilation in mind:
> The byte code can be translated on the fly (at runtime) into machine code for the particular CPU the application is running on. For those used to the normal design of a compiler and dynamic loader, this is somewhat like putting the final machine code generator in the dynamic loader.
> The byte code format was designed with this in mind, so the actual process of generating machine code is generally simple. Reasonably good code is produced: it does automatic register allocation and the compiler does some optimization when it produces the bytecode.
The idea that JIT compilation was retroactively bolted onto the Java ecosystem is absurd. Perhaps more than any other technology, Java brought JIT compilation into the mainstream, starting more than 20 years ago.