This is really a matter of the JVM, not JBoss.
do u know what is the reason for this .
For the settings you have, the JVM will initially ask the OS for 1GB of memory. As the JVM runs, it *might* after certain garbage collections ask the OS for more memory. If you ask the JVM how big the heap is, it will tell you anything from 1GB to 4GB, depending on how much memory it has allocated at that time.
Apparently, it is telling you 3GB because that is all that it has asked for. If you expect the JVM to use 4GB, force it to ask for that much:
10x (thanks) peter , will try the same.