32ビット参照を使用する場合、ヒープは32GBに制限されています。
ただし、64ビット参照を使用する場合は、32ビットJVMの場合と同様に、サイズがOSによって制限される可能性があります。たとえば、Windows 32ビットの場合、これは1.2〜1.5GBです。
注:JVMヒープをメインメモリに、理想的には1つのNUMAリージョン内に収める必要があります。これは、より大きなマシンでは約1TBです。JVMがNUMAリージョンにまたがる場合、メモリアクセスと特にGCははるかに長くかかります。JVMヒープがスワッピングを開始すると、GCに数時間かかる場合があります。また、スワップドライブがクラッシュするため、マシンが使用できなくなる場合もあります。
注:ヒープで32ビット参照を使用している場合でも、大きなダイレクトメモリとメモリマップサイズにアクセスできます。つまり、32GBをはるかに超えて使用します。
HotspotJVMでの圧縮されたoops
圧縮されたoopsは、マネージポインター(JVMのすべてではありませんが多くの場所)を32ビット値として表します。32ビット値は、8倍にスケーリングし、参照するオブジェクトを見つけるために64ビットベースアドレスに追加する必要があります。これにより、アプリケーションは最大40億のオブジェクト(バイトではない)、または最大約32Gbのヒープサイズをアドレス指定できます。同時に、データ構造のコンパクトさはILP32モードと競合します。