Well, at least you have backed off your very incorrect claim of what bytecode is. Now let's do the same thing for JIT. First, it is not a 'marketing term'. The JITC is a real compiler, doing all the things a 'real compiler' does. It starts with source (bytecode), determines what is actually being accomplished (by making graphs, etc), and generating native code to implement that in the most efficient way. And since the compilation is happening on the exact hardware that will execute it, the compiler knows about the exact capabilities of the processor and can use any and all applicable features of that hardware. This is not possible with what you call 'real compilers' - you must explicitly compile for each version of hardware to pick up new features.
Next, what you are trying to present as a 'problem' (recompiling) is actually a feature. It is not that the recompilation MUST be done, it is that the recompilation CAN be done. Because the compilation is done at run time, profiling information can be gathered, like how many times did we go down this branch as opposed to that one. Now you have the capability (again, because you are running on the actual hardware) of redoing how you decide to branch, for example, so that the most used path is going to have the least effect on the processor pipeline. If these conditions change over time it will just recompile to fit the new conditions. These sorts of on-the-fly optimizations are what allow Java code to outperform 'native' code in some circumstances.
JIT compilation is triggered after a certain (user-defined) number of invocations of a method. It happens in a different thread, and the original thread just keeps going with the interpretation. Any subsequent invocations of the method will also be interpreted until the JITC is complete. There is no way the JIT is going to be invoked 'multiple times per loop'.
JIT cache is not inexhaustible? Are you stuck in the 16-bit era or something? The default cache size is 256MB and can be increased if needed (this is for the IBM J9 JVM on z/OS, one of those 'UI and low performance only systems' you are always babbling about).
The reason I bring up emulation is because it demonstrates that whether a particular LANGUAGE is interpreted or compiled language is not dependent on whether it runs 'natively' or not. 'C' is a compiled language, whether you can run the resulting executable directly or not. Java is a 100% compiled language. If you had a processor that implemented the JVM you could run it natively. There used to be such processors, but JIT got so good it is not worth having special hardware anymore.
And oh, I am not 'the younger crowd'. I have been developing in-house, heavy-duty large applications for very large companies for 42 years. That development used to be predominantly COBOL, but now is Java. A quick search shows many job openings for mainframe Java developers. Those jobs are not developing 'UI and low performing phone apps'. Sorry to burst your bubble.