I have seen many apps that take instrument classes and take -javaagent
as a param when loading also put a -noverify
to the command line.
The Java doc says that -noverify
turns off class verification.
However why would anyone want to turn off verification even if they are instrumenting classes?
When it is used in conjunction with -javaagent
, it is most likely not for performance reasons, but because the agent intentionally creates "invalid" bytecode.
It should be noted that invalid bytecode might still execute fine, because some of the verification rules are quite strict. For instance, this
must not be accessed in a constructor before the super-constructor was called, because the variables are not initialized at this point. But there still might be other things you want to do (see the JRebel example). Then, you use -noverify
to circumvent that rule.