Java Virtual Machine Considerations

Endpoint Application Control uses Java Virtual Machine (JVM) applications. Using JVMs adds some processor and memory overhead. In most cases, the JVMs self-manage their settings, memory, and performance overhead.

Sometimes, just-in-time (JIT) compilation and "garbage collection" (GC) can cause JVM processor overhead to become especially high. For Endpoint Application Control consider the following:

  • JIT compilation can take from a few minutes to several hours, depending on environment and processor load.

  • GC continues for the lifetime of each process. If the JVM application is low on allocated memory, GC tasks run more frequently, consuming additional processor overhead.

Ideally, memory allocation should balance memory use and GC processing. High JVM processor overhead caused by GC can be corrected by increasing the allocated memory for the application. Processor overhead should not average more than two percent per minute after all JIT compilation is completed. To determine the JVM overhead, use the Server Summary widget and a process explorer application.

The Server Summary widget reports only the processor and memory used by Endpoint Application Control not including JVM overhead. Short peaks of processor use may not be displayed by the widget. Decide if JVM settings need adjustment by comparing the Server Summary widget reports to process explorer reports. See Server Summary Widget.

Default Endpoint Application Control Memory Use Allocations

Memory Use Source


RAM Used


Memory directly used by an application

Server processes:

Maximum 256 MB

Data store processes:

Minimum 512 MB

Maximum 25% of available RAM

Thread stacks

Memory used for process threads

256 KB per live thread

Typically, 20 - 60 MB

Direct memory

Memory for buffers or to share data with operating system APIs

Typically, 5 - 30 MB

Java and JIT-compiled code

Memory for application libraries

Typically, 60 - 120 MB

Native code

Memory for shared libraries

Highly variable

Because this memory use is shared across all processes, it depends on the specifics of those processes.


Memory overhead per process

Typically, 100 - 150 MB