誰もが連続した記憶について答えているようですが、より差し迫った問題を認めることを怠っています。
100%の連続したメモリ割り当てがあっても、32ビットのWindows OSで2 GiBのヒープサイズを使用することはできません(デフォルトでは*)。これは、32ビットのWindowsプロセスが2 GiBを超える領域をアドレス指定できないためです。
Javaプロセスには、ヒープに加えて、 perm gen(Java 8より前)、スレッドごとのスタックサイズ、JVM /ライブラリのオーバーヘッド(ビルドごとにかなり増加します)がすべて含まれます。
さらに、JVMフラグとそのデフォルト値はバージョン間で異なります。以下を実行するだけで、いくつかのアイデアが得られます。
 java -XX:+PrintFlagsFinal
オプションの多くは、ヒープ内外のメモリ分割に影響します。その2 GiBを多かれ少なかれ遊ばせる...
私のこの答えの一部を再利用するには(Tomcatについてですが、すべてのJavaプロセスに適用されます):
  Windows OSは、32ビットプロセスのメモリ割り当てを合計2 GiBに制限します(デフォルト)。
  
  プロセスに割り当てられている他のメモリ(JVM /ライブラリのオーバーヘッド、perm genスペースなど)もあるため、約1.5 GiBのヒープスペースを割り当てることができます。
  
  32ビットWindowsが2 GBのプロセスアドレススペース制限を課すのに、64ビットWindowsは4 GB制限を課すのはなぜですか?
  
  他の最近のオペレーティングシステム[咳Linux]では、32ビットプロセスが4 GiBのアドレス可能なスペースのすべて(またはほとんど)を使用できます。
  
  つまり、32ビットプロセスの制限を4 GiB(32ビットでは3 GiB)に増やすように64ビットWindows OSを構成できます。
  
  http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx