Today's Java developers are increasingly relying on libraries that generate Java byte-code at run time to effectively implement various tricks that are hard or impossible to do in Java. However, while the javac compiler is guaranteed to produce correct Java byte-code, shifting down to the byte-code level requires that you keep track of its correctness yourself. Otherwise, there is a chance to get a j.l.VerifyError at run time upon the loading of a generated class, because the JVM passes all classes through the Java byte-code verifier to enforce strict correctness requirements. Therefore, knowing just the semantics of Java byte-code instructions is often not enough to properly synthesize classes — you also need to know how the Java byte-code verifier works, what byte-code it deems correct, and what it does not.
In this talk, Nikita will tell what mission the Java byte-code verifier carries out in the JVM, when and how it works, whether it may affect the performance of your application, and why it turning it off is so dangerous.
Download presentation