The problem with deoptimization is the performance hit every time it takes place, which leads to a saw graph similar to when there is too much GC going on.
Sure, but class loading only changes assumptions in one direction for example — in the aforementioned example it would cause only one deoptimization after which the code won’t be worse off than the AOT compiled one. So the JIT case before class load may perform better, and afterwards will perform the same.