Skip to content

Features Contributed by SAP

Goetz Lindenmaier edited this page Jun 7, 2018 · 126 revisions

This page lists features of SapMachine that were crafted by SAP to enhance the enterprise-readiness of SapMachine. In general, we contribute these directly upstream to OpenJDK. We might downport these to an earlier version of SapMachine, though. If a feature is not accepted by the OpenJDK community, but considered essential by us, it might only appear in SapMachine. This omits bug fixes, work on our platform ports, work on the build and test infrastructure etc. we do in OpenJDK.

Below tables list the version it's available in OpenJDK and SapMachine in bold. If it's only in SapMachine, the version is given in normal letters.

Functional Improvements

Memory Management

Metaspace

The Metaspace of hotspot is a native memory region that contains information about loaded classes. It utilizes it's own custom memory management. This management could get into situations where no more allocations were possible although there was still enough space available. A basic redesign of this memory management by SAP avoids these situations and improves memory handling of Metaspace altogether. Major work is to be found in

since
8198423: Improve metaspace chunk allocation 11
11

Java in Containers

We saw the VM starting too many auxiliary threads for small applications, especially within containers.

since
8198510: Enable UseDynamicNumberOfGCThreads by default 11
8198756: Lazy allocation of compiler threads 11

Stack sizes

Configuring stack sizes used to depend strongly on the system page size and was optimized for 4K pages. We made stack configuration less dependent on the page size wrt. overflow detection and minimal stack sizes.

since
8170655: [posix] Fix minimum stack size computations 10
8139864: Improve handling of stack protection zones. 10
11

Exception messages

Many exceptions thrown in OpenJDK 10 and earlier don't give detailed information about the underlying problem, although it's known when the exception is thrown. We improve these messages step by step.

since
8197405: Improve messages of AbstractMethodErrors and IncompatibleClassChangeErrors. 10, 11
8199852: Print more information about class loaders in LinkageErrors. 11
8201593: Print array length in ArrayIndexOutOfBoundsException. 11
8203881: Print erroneous size in NegativeArraySizeException 11
11

Servicability Extensions

Jcmd improvements

Jcmd allows to request information from a running Java VM. SAP JVM knows similar tools. We add the commands known in the SAP JVM tools to Jcmd.

since
8189864: Provide an ascii map to visualize metaspace fragmentation 10
8198691: CodeHeap State Analytics
Print information about the memory containing Java methods compiled to native code.
11
8198553: jcmd: separate Metaspace statistics from NMT
Introduces new command VM.metaspace.
11
8201572: Improve Metaspace Statistics 11
8203219: VM.metaspace jcmd should optionally show loaded classes for loaders 11
8203455: jcmd: VM.metaspace: print loader name for anonymous CLDs 11

Unified logging

since
11

Retaining information in case of a crash

If OpenJdk crashes, it writes a collection of basic information into a file named hs-err_<process id>.log. This information is very useful to analyze the crash post-mortem. We enrich this printout with information we found useful for SAP JVM support.

since
8191101: Show register content in hs-err file on assert 11
8203292: Print complete set of flags in the hs_err file 11
8202427: Enhance os::print_memory_info on Windows 11
11

Documentation

since
8200384: jcmd help output should be sorted 11
8189102: All tools should support -?, -h and --help 11

Clone this wiki locally