The Directory Server is comprised mostly of a JVM heap and a marginal amount of memory allocated by the JVM’s execution of native code. While we frequently refer to the JVM Heap as the maximum memory consumed by the Directory Server, the actual process size will be slightly larger than the Xmx value due to accumulation of small chunks of native code that Java requires for things, such as SSL sockets.

DS Memory Breakdown

Within the JVM Heap, the principal memory components are the New and Old Generations. The New Generation is a smaller area of memory where all data is initially allocated and is cleaned of garbage often. Any data that stays "alive" long enough will be promoted to the Old Generation for the longer term. The Old Generation is where the database cache will eventually reside. The Old Generation size is computed from the leftover heap after defining the MaxHeapSize and New Generation sizes; therefore, it is not explicitly stated in the JVM options. A typical set of Generation definitions for the JVM is as follows, where mx and ms values represent the heap size:

-Xmx16g -Xms16g -XX:MaxNewSize=2g -XX-NewSize=2g
Note: The mx and ms values should always be the same, and the MaxNewSize/NewSize values should be the same. This will help avoid negative changes in performance.

The MaxNewSize/NewSize values should never need to exceed 2g. The setup and dsjavaproperties tools set MaxNewSize/NewSize values based on the results of extensive performance testing, and should not need to be changed.