Memory Usage in Java
Java memory tuning and performance notes.
You can allocate memory to the JVM when it starts up. This is to limit the amount of resources the JVM process can use your machine.
If you do not specify memory settings then the JVM will automatically allocate limits when it is created.
To see how much memory is being used, take a look at the available monitoring tools.
Heap Space
Section titled “Heap Space”java.lang.OutOfMemoryError: Java heap spaceIf you see an OutOfMemoryError exception telling you about heap space, you could increase it using the -Xmx JVM
parameter. e.g.
java -Xmx512mTo allocate a maximum of 512M of memory to the JVM.
Type java -X for a list of JVM specific standard parameters
PermSize
Section titled “PermSize”If you see an exception such as:
java.lang.OutOfMemoryError: PermGen spaceUse -XX:MaxPermSize to increase the bucket for permanent generation memory. e.g. to set the maximum to 512m use
java -XX:MaxPermSize=512mIf your application uses numerous classes you may need to increase this setting.
Monitoring
Section titled “Monitoring”You can use JMX to inspect the JVM while it is running. There are tools that come with the JDK in the bin directory.
jconsole
Section titled “jconsole”jconsole is a GUI that can attach to running JVMs. From here you can inspect memory.
Determine the PID of the JVM, then you can get information about memory. This is useful if the JVM is
so unresponsive that jconsole cannot connect. To avoid permission errors, you should
run jmap with the same user that is running them JVM process.
$ jmap.exe -heap 5568Attaching to process ID 5568, please wait...Debugger attached successfully.Server compiler detected.JVM version is 24.45-b08
using thread-local object allocation.Parallel GC with 4 thread(s)
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 2134900736 (2036.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 85983232 (82.0MB) G1HeapRegionSize = 0 (0.0MB)
Heap Usage:PS Young GenerationEden Space: capacity = 710934528 (678.0MB) used = 0 (0.0MB) free = 710934528 (678.0MB) 0.0% usedFrom Space: capacity = 524288 (0.5MB) used = 0 (0.0MB) free = 524288 (0.5MB) 0.0% usedTo Space: capacity = 524288 (0.5MB) used = 0 (0.0MB) free = 524288 (0.5MB) 0.0% usedPS Old Generation capacity = 1422917632 (1357.0MB) used = 107998376 (102.99527740478516MB) free = 1314919256 (1254.0047225952148MB) 7.589924642946585% usedPS Perm Generation capacity = 85983232 (82.0MB) used = 85983216 (81.99998474121094MB) free = 16 (1.52587890625E-5MB) 99.99998139172065% used
26816 interned Strings occupying 2723864 bytes.In the above example it shows that the PS Perm Generation is full.