You can't do it as JVM needs to allocate all the heap in a single continuous chunk, which may not be possible because of the memory fragmentation. See my FAQ article for more details.
See also this picture:
As you can notice, total process memory is not just the heap size, making it much easier to hit the 2GB OS limit.
The actual heap that can be used varies on the OS configuration and on other applications that are running (DLLs with hooks inject into process space and cause additional fragmentation). Usually it's somewhere between 512M and 1G, but can be higher on a clean system.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…