IBM Support

IV67555: JAVA JIT - UNSYNCHRONIZED USED OF ARRAYLIST LEADS TO A CRASH

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: Crash in JIT compiled code, GC or the interpreter
    due to a bad object reference in the backing array of an
    ArrayList.
    .
    Stack Trace: The stack trace for a failure of this type is not
    consistent. It could fail in several ways with different stack
    traces.
    .
    The problem can occur on any platform
    

Local fix

  • -Xjit:disableArrayCopyOpts
    
    This option will have a small (likely unmeasurable) performance
    impact, but a more pronounced effect could be seen in extreme
    cases where arraycopy() calls account for the majority of the
    execution time.
    

Problem summary

  • The JIT attempts to optimize arraycopy() calls made by ArrayList
    methods knowing that the code is written such that the
    arraycopy() is never asked to copy more then the number of
    elements in the backing array. This is only true if uses of the
    ArrayList are protected by a lock or only used by a single
    thread. Unsynchronized multi-threaded uses of an ArrayList could
    result in race conditions that allows for the ArrayList counters
    and the backing array to become out of sync. This allows the
    possibility for arraycopy() to be asked to copy more elements
    then exist in the backing array.
    

Problem conclusion

  • The JIT was modified so that it no longer assumes that the
    ArrayList methods will never call arraycopy() with arguments
    that cause it to copy beyond the end of the backing array. This
    means that rather then copying random garbage past the end of
    the array, it will throw an exception in the cases where
    unsynchronized multi-threaded access to an ArrayList results in
    internal inconsistencies within the ArrayList.
    .
    This APAR will be fixed in the following Java Releases:
       6 R1 SR8 FP3   (6.1.8.3)
       7 R1 SR3         (7.1.3.0)
       6    SR16 FP3  (6.0.16.3)
       7    SR8 FP10  (7.0.8.10)
    .
    Contact your IBM Product's Service Team for these Service
    Refreshes and Fix Packs.
    For those running stand-alone, information about the Service
    Refreshes and Fix Packs can be found at:
               https://www.ibm.com/developerworks/java/jdk/
    

Temporary fix

Comments

APAR Information

  • APAR number

    IV67555

  • Reported component name

    JIT

  • Reported component ID

    620700124

  • Reported release

    260

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2014-12-04

  • Closed date

    2014-12-04

  • Last modified date

    2015-10-20

  • 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

  • R260 PSY

       UP

  • R130 PSY

       UP

  • R600 PSY

       UP

[{"Business Unit":{"code":"BU048","label":"IBM Software"},"Product":{"code":"SSC9HBA","label":"Just In Time (JIT) Compiler"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"260","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
20 October 2015