TEC600823: When do we have to use the flag XX:-UseSplitVerifier ?

Document created by SamCreek Employee on May 26, 2016Last modified by SamCreek Employee on May 26, 2016
Version 2Show Document
  • View in full screen mode

Document ID:  TEC600823
Last Modified Date:  10/18/2013

 

  • Products
    • CA Application Performance Management
  • Components
    • INTROSCOPE

 

Description:Use of the flag XX:-UseSplitVerifierSolution:

  1. When should we use this flag?

    UseSplitVerifier is needed for instrumented applications running on 1.7 versions of Java

    Example format for using this flag
    -javaagent:/opt/wily/Agent.jar -XX:-UseSplitVerifier

  2. Why is this flag needed?

    The Virtual Machine in Java 7 uses a new type-checker (also known as StackMap Frames) that does stricter checks on the bytecode ,

    This is in accordance with the JSR 202 as documented in the below link
    http://www.oracle.com/technetwork/java/javase/compatibility-417013.html#jdk7

    Tools like Introscope that rely on bytecode manipulation to instrument the application will fail due to this new bytecode verifier.

    Use of the flag -XX:-UseSplitVerifier will revert the JVM to use the Java 6 type checker and Introscope can instrument the application without any issues.

  3. Errors that indicate this flag is needed

    Exception in thread "main" java.lang.VerifyError: StackMapTable error: bad offset in method TestFeature.main([Ljava/lang/String;)V
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

    With a similar environment in app server, the error may appear as

    java.lang.ClassFormatError: Illegal local variable table start_pc 7 in method test.servlet.TestServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
    java.lang.Class.getConstructor0(Class.java:2714)
    java.lang.Class.newInstance0(Class.java:343)
    java.lang.Class.newInstance(Class.java:325)

    or
    java.lang.InternalError
    at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
    at sun.instrument.InstrumentationImpl.redefineClasses(InstrumentationImpl.java:170)

  4. Which agent versions need this?

    9.1 and 9.5

  5. Future of UseSplitVerifier

    Oracle has planned to deprecate this flag starting with version Java 8,

    APM product team is planning to remove this flag starting with version 9.6 of APM.

 

 

Search the Entire CA APM Knowledge Base

 

search-kb.jpg

 

Attachments

    Outcomes