IBM Support

IJ25978: INTERMITTENT ASSERTION FAILURE REPORTED

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

 

APAR status

  • Closed as program error.

Error description

  • Error Message: ASSERTION FAILED ** at
    ../../../../gc_glue_java/ScavengerRootScanner.hpp:108:
    ((MM_StackSlotValidator(MM_StackSlotValidator::NOT_ON_HEAP,
    *slotPtr, stackLocation, walkState).validate(_env)))
    .
    Stack Trace: In a javacore file produced, information similar to
    the following might be found:
    3XEHSTTYPE     21:54:46:573159000 GMT j9mm.479 - * ** ASSERTION
    FAILED ** at
    ../../../../gc_glue_java/ScavengerRootScanner.hpp:108:
    ((MM_StackSlotValidator(MM_StackSlotValidator::NOT_ON_HEAP,
    *slotPtr, stackLocation, walkState).validate(_env)))
    3XEHSTTYPE     21:54:46:573156000 GMT j9mm.491 -
    *<StackSlotValidator::reportStackSlot
    3XEHSTTYPE     21:54:46:573154000 GMT j9mm.493 - *
    stack=AEBF5550-AEBFB168
    3XEHSTTYPE     21:54:46:573145000 GMT j9mm.490 - *
    method=B3ACE300 (MyJavaClass.myMethod(LArgumentType;)V)
    (Interpreted)
    3XEHSTTYPE     21:54:46:573135000 GMT j9mm.489 - *
    jitInfo=00000000
    3XEHSTTYPE     21:54:46:573128000 GMT j9mm.488 - *
    literals=B3ACE300
    3XEHSTTYPE     21:54:46:573122000 GMT j9mm.487 - *
    walkSP=AEBFAF50
    3XEHSTTYPE     21:54:46:573115000 GMT j9mm.486 - *
    arg0EA=AEBFAF74
    3XEHSTTYPE     21:54:46:573108000 GMT j9mm.485 - *
    framesWalked=1
    3XEHSTTYPE     21:54:46:573101000 GMT j9mm.484 - * PC=B39210D0
    3XEHSTTYPE     21:54:46:573094000 GMT j9mm.483 - * O-Slot
    value=B40E3094
    3XEHSTTYPE     21:54:46:573087000 GMT j9mm.482 - *
    O-Slot=AEBFAF5C
    3XEHSTTYPE     21:54:46:573076000 GMT j9mm.481 - * Object
    neither in heap nor stack-allocated in thread Pooled Thread #10
    .
    

Local fix

  • The failure can be worked around by specifying the
    -Xjit:disableEscapeAnalysis option.  Note that specifying this
    option might have an effect on program performance
    

Problem summary

  • The Escape Analysis (EA) optimizer of the Java JIT compiler
    attempts to allocate some Java objects on the stack for a method
    invocation rather than the heap if the use of those objects is
    entirely contained within that method invocation.  This is done
    in order to improve performance by reducing the amount of object
    allocation on the heap.
    If an object might still be used outside the method invocation -
    which is referred to as "escaping" - but relatively
    infrequently, EA might still allocate the object on the stack.
    It will generate code that will copy the object into an object
    allocated on the heap at the point at which the escape occurs.
    One example of such escaping can occur if a method that has been
    JIT compiled has to transfer execution of that method to the JVM
    interpreter while the method is executing.  Any objects that
    were allocated on the stack by EA that need to be accessible to
    the interpreter in order for it to continue executing the method
    must be copied to heap allocated objects at the point of the
    transfer of execution to the interpreter.
    In the case that triggers the assertion failure, an object that
    had been allocated on the stack by EA was not copied to a heap
    allocated object at the point of transition to the interpreter.
    The JVM Garbage Collector did not recognize the address of that
    object as being on the heap nor being a still valid address on
    the stack, and it reported the assertion failure.
    

Problem conclusion

  • The problem was fixed by ensuring the Escape Analysis optimizer
    correctly identifies cases in which a stack allocated object
    needs to be copied to a heap allocated object at the point at
    which the invocation of a Java JIT compiled method needs to
    transfer its execution to the JVM interpreter.
    .
    This APAR will be fixed in the following Java Releases:
       8    SR6 FP15  (8.0.6.15)
    .
    Contact your IBM Product's Service Team for these Service
    Refreshes and Fix Packs.
    For those running stand-alone, information about the available
    Service Refreshes and Fix Packs can be found at:
               https://www.ibm.com/developerworks/java/jdk/
    

Temporary fix

Comments

APAR Information

  • APAR number

    IJ25978

  • Reported component name

    JIT

  • Reported component ID

    620700124

  • Reported release

    130

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2020-06-30

  • Closed date

    2020-06-30

  • Last modified date

    2020-06-30

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    JIT

  • Fixed component ID

    620700124

Applicable component levels

[{"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Product":{"code":"SSNVBF","label":"Runtimes for Java Technology"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"130","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]

Document Information

Modified date:
01 July 2020