Linux makes a large distinction between allocated memory and used memory. Newer kernels all support overcommit, so your programs can request an allocation summing to more RAM+Swap than is available in the system. That RAM is only actually accounted in the kernel as used once the program starts writing data to it. This sounds like madness, but in the case of Java especially is very useful... Java can allocate anywhere between 2 and 10 times more than it needs. As an example, the Caucho Resin Java EE server has two components: a watchdog manager and the server itself. On one of my systems, the latter has currently allocated 550MB and used ~212MB, while the former has currently allocated 170MB and used only ~32MB!
When I run same program on 64 bit linux ,I noticed that this program consumes lot of memory. Even when i start this program on linux and there is no requests,program consumes lot of memory. The java process memory footprint is around 811MB (using pmap command or top -p).