---
title: PingDirectory server process memory
description: The PingDirectory server consists mainly of a Java Virtual Machine (JVM) heap and a marginal amount of memory allocated by the JVM's execution of native code.
component: pingdirectory
version: 11.0
page_id: pingdirectory:pingdirectory_server_administration_guide:pd_ds_server_process_memory
canonical_url: https://docs.pingidentity.com/pingdirectory/11.0/pingdirectory_server_administration_guide/pd_ds_server_process_memory.html
revdate: September 13, 2023
---

# PingDirectory server process memory

The PingDirectory server consists mainly of a Java Virtual Machine (JVM) heap and a marginal amount of memory allocated by the JVM's execution of native code.

Although the JVM heap is referred to frequently as the maximum memory consumed by the PingDirectory server, the actual process size is slightly larger than the `Xmx` value because of the accumulation of small chunks of native code that Java requires for items such as SSL sockets.

A figure demonstrating the Java Development Kit (JDK) Heap Structure. The New Gen (new generation) is separated from the Old Gen (old generation), and the fully populated Database Cache is within the old generation, as described in the paragraph following the figure.

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, with frequent garbage collection. Any data that's present long enough is promoted to the old generation for the longer term. The old generation is where the database cache eventually resides. The old generation's size isn't explicitly stated in the JVM options; it's computed from the leftover heap after defining the `MaxHeapSize` and new generation sizes.

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
```

|   |                                                                                                                                                                                                                                                                                                                                           |
| - | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | The `mx` and `ms` values should always be the same, and the `MaxNewSize` and `NewSize` values should be the same. This helps avoid negative changes in performance.The `setup` and `dsjavaproperties` tools set `MaxNewSize` and `NewSize` values based on the results of extensive performance testing and shouldn't need to be changed. |
