The devirtualizer (maybe this is the wrong JVM terminology, it’s basically what clang/GC call it) is part of the optimizer which sees that you have a virtual function call (like most in Java) where there is a unique caller, so you can replace the virtual call with a direct one and possibly inline it.
In the JVM I think this can only be done speculatively (you have to double check the type), but it still matters.
In the JVM I think this can only be done speculatively (you have to double check the type), but it still matters.