JLS and the JVM specification indicate that the behavior of any Java statement (or for the JVM specification, how byte codes work, etc.), but they do not say anything about how this should happen. In both documents, it is understood that any implementation that correctly implements the specified abstract behavior is considered a compatible Java implementation. The basic idea of ββhaving an abstract standard is to indicate which observable behaviors should be shared across all implementations, without going into the details of what these behaviors do. For this reason, implementations and their optimizers are allowed to do what, in their opinion, is necessary and correct for the code to execute if they do not deviate from the specified semantics.
Hope this helps!
source share