I'm running a Java application on Solaris using the -Xmx256M switch. When I connect via JMX, the JVM tells me the application is using about 50Mb of heap, and correctly states the maximum heap size is around 250Mb.
However, Solaris is telling me a very different story. When running pmap, for example, I get:
~ > pmap -S 10124 | grep heap
0002C000 3920 3920 rwx-- [ heap ]
00400000 815104 815104 rwx-- [ heap ]
Showing an incredible 800Mb of memory being used for heap space.
ps confirms the memory usage:
ps -eo vsz,rss,pid,args | sort -n
939368 925576 10124 /apps/../java -Xmx256M xxxx
I've read https://plumbr.eu/blog/why-does-my-java-process-consume-more-memory-than-xmx, but the article describes JVM using memory other than heap (i.e. stack, native libraries and threads) - but in my case, the JVM is actually using much more heap than specified.
My java version is:
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) Server VM (build 20.6-b01, mixed mode)
To add to the mystery, I have other Java applications running on the same box, using the same JVM with the same settings, that behave perfectly fine. What makes this application "special" is that it connects to an external third party application (RET LBN, if that helps). It does not run any JNI or native code - so why is the third party library not respecting the JVM's startup parameters?
I'm at my wits end - any help or pointers will be greatly appreciated.