z/TPF - Group home

MMAP private allocator for Java (PJ46404)

By Jim Johnston posted Fri April 16, 2021 12:43 PM

MMAP private allocator for Java introduces a new 64-bit heap area that Java applications can allocate from. This support has the following benefits:

  • Smaller Java application memory footprint
  • Reduction in memory requirements to support Java
  • Smaller Java system dumps to the file system
  • New diagnostic statistics that provide configuration insight

A system scoped Keypoint A configuration, MAXMMAP, was created to limit the size of the new area that affects all Java applications using the support. The default value is zero, which means the MMAP private allocator for Java is disabled. If the Java application depletes the 64-bit allocations from the MMAP area, it will fallback and begin allocating from the general 64-bit heap area, limited by the MAXXMMES parameter. When migrating from an existing Java-configured system, you can set the MAXMMAP configuration limit to 100MB less than the previously configured MAXXMMES setting. Then, set the MAXXMMES parameter value to be at least 100MB. For example:

Before support:     MAXXMMES – 500MB
After support:        MAXMMAP – 400MB    MAXXMMES – 100MB

Keep in mind, the actual frames consumed by the process will be approximately 30%-50% less. Using the Javacore dump you can validate your setting and reduce the MAXMMAP parameter value as you see appropriate.

The Javacore was updated to provide insight and is simply a new summary section in the Javacore itself. Below is an example command to capture the Javacore for z/TPF, followed by an example of the subsection that provides the system configuration insight:

zfile kill -s SIGIQUIT <JVM PID>
Native memory stats for z/TPF
Total highwater mark 64-bit heap 1MB Frames: 52
Total highwater mark 31-bit heap 1MB Frames: 2 (limited by EMPS)
Highwater mark 64-bit MMAP heap 1MB Frames: 40 (limited by MAXMMAP)
Current process 64-bit MMAP heap limit: 600 (actual MAXMMAP setting)
MMAP Region Virtual Address start: 0x00000003A5800000
MMAP Region highwater mark Virtual Address end: 0x00000003BA300000
Highwater mark 64-bit MAXXMMES heap 1MB Frames: 12 (limited by MAXXMMES)
Total GC heap 1MB Frames: 11 (limited by -Xmx Java Option)
Total JIT Code Cache heap 1MB Frames: 5

In summary, MMAP private allocator for Java enables Java programs to use memory more efficiently by providing a separate 64-bit heap area that is limited by the MAXMMAP configuration. This support provides some system configuration insight through the Javacore diagnostics. To use this support, the minimum JRE level must be 8.0-6.20 (APAR PJ46358, download dated Jan. 26, 2021). To use the Javacore insight, the level of JRE must be at least 8.0-6.25 (APAR PJ46432).

For more information about this support, see the APEDIT for APAR PJ46404.