web-dev-qa-db-ja.com

64ビットの最大メモリJava

64ビットプラットフォームでJavaに割り当てることができるヒープスペースの最大量はいくつですか?それは無制限ですか?

19
Raymond Barlow

理論的には264、しかし制限があるかもしれません(明らかに)

このFAQ によると、ローカルシステムのメモリとスワップスペースによってのみ制限されます。

64ビットVMでは、64ビットのアドレッシング機能があり、システムが提供する物理メモリとスワップ領域の量によってのみ制限される最大Javaヒープサイズになります。

32ビットJVMで大きなヒープを取得できないのはなぜですか?も参照してください。

また、コマンドラインから最大ヒープを設定する必要があることにも注意してください。 -Xmxコマンドなし。それがない場合Javaは、同じFAQによると、64ビットマシンのデフォルトの最大ヒープとして64mb + 30%= 83.2mbを使用します。

Java -Xmx1000g myClass 

私のマシンでは問題なく動作します。しかし、まだ「t」修飾子をサポートしていないようで、テラバイト単位で最大メモリを指定することはまだできません:)

16
Chad Okere

ユニバース内のすべてのatomを1バイトのRAMにすることができれば、64ビットのアドレス空間に割り当てることができます。

実際、それは少し大げさです。

(WolframAlphaによると)ユニバースには10 ^ 80アトムがあり、64ビットシステムには2 ^ 64バイトのアドレス空間があるため、5x10 ^ 60アトムごとに1つしかアドレス指定できません。しかし、18兆バイトのRAMを搭載している場合は、それを実現するための量子ブラックホールがいくつか必要になるでしょう。

14
Paul Tomblin

これはおそらくあなたのVMが実行されているシステムに依存します。AMDx64アーキテクチャを実行している場合、現在出荷されているプロセッサのアドレス空間は64ではなく48ビットを使用します。これにより、約256 TB( http://en.wikipedia.org/wiki/X86-64 を参照)

私はVMの専門家ではありませんが、最新のOSは通常、物理メモリと同じ量のメモリを提供しますRAMプラス利用可能な仮想メモリ。おそらくこれは、VMが構成に応じてアプリケーションに渡すものです。

3
RED SOFT ADAIR

Sunの最近のVMでは、実用的なヒープ制限サイズは通常、使用可能な物理メモリまたは仮想メモリ、あるいはその両方の512倍です。理論上の制限がはるかに高い場合でも、VMは起動時に512バイトのヒープメモリごとに1バイトを割り当てます。そのため、メモリ管理のために1TBのヒープに2GBがすぐに必要になります。

2
jarnbjo

理論的には2^63および2^64バイト。

実際には、マシンで使用できる物理メモリとスワップ領域の量によって制限されます。また、物理メモリは、チップセット(つまり、物理メモリアドレスバス上のアドレスピンの数)とマザーボード(つまり、DIMMソケットの数とサイズ)によって制限されます。

0
Stephen C