This article fails to say what this flag actually does. My understanding is that it makes 64 bit java use 32 bit pointers. Using the fact that all java memory is 8 byte aligned, a 32 bit pointer gets you a 32gb memory space.
An interesting tidbit to those who do not know:
x86 allows for all memory accesses to use an addressing mode of base+{1,2,4,8}*index. This allows this particular optimization to be used with no performance cost for many normal accesses.
We love this setting. It gives us a really nice performance boost on big heaps. Obviously, it can only be enabled on heap sizes below 32GB. We have found that with this setting enabled on a 32GB heap, we need to go up to 48GB+ in order to achieve the same performance.
Heap size should be roughly equivalent to the overall footprint unless you're allocating a lot of native memory or mmapped files from the java process. If you are, well, that's your answer.