Did, you ever get a response to this issue. I am having a similar problem.
The maximum memory size of the VM process is not simply java heap (-Xmx) + perm generation (-XX:MaxPermSize).
e.g. There is also the native code of the VM itself which needs to reside in memory, and more. (off the top of my head I don't remember everything else that's loaded)
The following threads discuss the issue:
The memory system of the Java virtual machine manages the following kinds of memory:
The Java virtual machine has a heap that is the runtime data area from which memory for all class instances and arrays are allocated. It is created at the Java virtual machine start-up. Heap memory for objects is reclaimed by an automatic memory management system which is known as a garbage collector.
The heap may be of a fixed size or may be expanded and shrunk. The memory for the heap does not need to be contiguous.
2. Non-Heap Memory
The Java virtual machine manages memory other than the heap (referred as non-heap memory).
The Java virtual machine has a method area that is shared among all threads. The method area belongs to non-heap memory. It stores per-class structures such as a runtime constant pool, field and method data, and the code for methods and constructors. It is created at the Java virtual machine start-up.
The method area is logically part of the heap but a Java virtual machine implementation may choose not to either garbage collect or compact it. Similar to the heap, the method area may be of a fixed size or may be expanded and shrunk. The memory for the method area does not need to be contiguous.
In addition to the method area, a Java virtual machine implementation may require memory for internal processing or optimization which also belongs to non-heap memory. For example, the JIT compiler requires memory for storing the native machine code translated from the Java virtual machine code for high performance.
I am running a Linux server with JBoss and it seems that the memory management is going ok, maybe you should try this JAVA_OPTS:
JAVA_OPTS="-server -Djava.awt.headless=true -Xms256M -Xmx512M -XX:PermSize=128M -XX:SurvivorRatio=16 -Xnoclassgc -XX:MaxPermSize=512m "
Please be noted that I have 1GRAM in the box, so I think this option is suitable for 1GRAM
If you have concerns:
Always post the version of the software you're using!