IBM Support

IZ85288: GRADUAL MEMORY LEAK IN THE JAVA JIT DATA CACHE

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • Error Message: When running applications with a high rate of
    class unloading (i.e. classes are loaded, used briefly or not at
    all, and then unloaded quickly), the Java 5 or Java 6 JVM may
    gradually increase the amount of memory it allocates for the JIT
    data cache without any apparent limit.
    The symptom can be observed by collecting a Java core dump from
    the JVM, by sending SIGQUIT (or Ctrl-Break on Windows) to the
    process. The dump lists all the JIT code cache segments and JIT
    data cache segments that have been allocated. If there are more
    memory segments in the JIT data cache than in the JIT code
    cache, the application may be suffering from the gradual memory
    leak. Eventually, the data cache could grow so large that all
    available memory is exhausted, and the JVM could crash due to a
    native out-of-memory condition.
    This problem is more pronounced on 64-bit platforms due to the
    larger pointer size.
    .
    Stack Trace: N/A
    .
    

Local fix

  • This issue can be avoided if the application can be re-worked to
    reduce or eliminate class unloading. If that is not feasible,
    the memory leak can also be stopped by setting the environment
    variable TR_DisableCCR=1 before invoking the JVM. Note that this
    can cause the JIT compiler to compile fewer methods, reducing
    the overall performance of the application.
    

Problem summary

  • The JIT data cache contains meta-data that describe JIT-compiled
    methods. Its size is usually a fraction of the size of the JIT
    code cache. For performance reasons, the maximum size of the JIT
    data cache is not hard-coded. The memory leak occurs when the
    JIT data cache is populated with an excessive amount of
    meta-data pertaining to classes that have been unloaded.
    

Problem conclusion

  • This defect will be fixed in:
    6.0.0 SR9
    5.0.0 SR12 FP2
    .
    A new option has been added to Java 5 and Java 6 to allow users
    experiencing this issue to control the size of the JIT data
    cache. The option must be added to the JVM command line, and its
    syntax is:
    -Xjit:dataTotal=nnnn
    where "nnnn" is the maximum size of the data cache in kilobytes.
    For example, setting "nnnn" to 65536 limits the data cache to
    64MB. Note that the JIT compiler will be unable to compile more
    methods when the JIT data cache becomes full; to pick an optimal
    value for "nnnn", careful measurement and tuning is recommended.
    If the option is not used, the JVM assumes its original
    behaviour, i.e. the size of the JIT data cache is unlimited.
    .
    To obtain the fix:
    Install build 20100928 or later
    

Temporary fix

Comments

APAR Information

  • APAR number

    IZ85288

  • Reported component name

    JAVA 5 JIT

  • Reported component ID

    620500124

  • Reported release

    500

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2010-09-21

  • Closed date

    2010-10-20

  • Last modified date

    2010-10-20

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

    IZ85265

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

Fix information

  • Fixed component name

    JAVA 5 JIT

  • Fixed component ID

    620500124

Applicable component levels

  • R500 PSN

       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":"5.0","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
20 October 2010