Chapter 8. Native Memory Best
The heap is the largest consumer of memory in a Java application, but the JVM will allocate
and use a large amount of native memory. And while Chapter 7 discussed ways to efficiently
manage the heap from a programmatic point of view, the configuration of the heap and how
it interacts with the native memory of the operating system is another important factor in the
overall performance of an application.
This chapter discusses these aspects of native (or operating system) memory. We start with a
discussion of the entire memory use of the JVM, with a goal of understanding how to monit-
or that usage for performance issues. Then we'll discuss various ways to tune the JVM and
operating system for optimal memory use.
The heap (usually) accounts for the largest amount of memory used by the JVM, but the
JVM also uses memory for its internal operations. This nonheap memory is native memory.
Native memory can also be allocated in applications (via JNI calls to malloc() and similar
methods, or when using New I/O, or NIO). The total of native and heap memory used by the
JVM yields the total footprint of an application.
From the point of view of the operating system, this total footprint is the key to performance.
If enough physical memory to contain the entire total footprint of an application is not avail-
able, performance may begin to suffer. The operative word here is “may.” There are parts of
native memory that are really only used during startup (for instance, the memory associated
to load the JAR files in the classpath), and if that memory is swapped out, it won't necessar-
ily be noticed. Some of the native memory used by one Java process is shared with other
Java processes on the system, and some smaller part is shared with other kinds of processes
on the system. For the most part, though, for optimal performance you want to be sure that
the total footprint of all Java processes does not exceed the physical memory of the machine
(plus you want to leave some memory available for other applications).