2011-07-12 16 views
12

お金は制限要因ではなかったとしましょう。私は強力な単一のマシン上で動作するJavaプログラムを作成したかったのです。JVMメモリとCPU使用率の実際的な制限はありますか?

Javaプログラムをスワップしたり、ディスクに移動することなく、できるだけ早く実行させることが目標です。

のは、このコンピュータが有することとしましょう:RAMの

  • 1 TB(64個の16ギガバイトのDIMM)64ビットのUbuntu
を実行
  • 64プロセッサコア(8 8コアプロセッサ)
  • JVMで実行されているJavaプログラムの1つのインスタンスで、このような多くのRAMとプロセッサを利用できますか?

    使用法と効率を制限する可能性のある実用的な考慮事項はありますか?

    • OSプロセス(メモリ&スレッド)の制限事項はありますか。
    • JVMメモリ/ヒープの制限?
    • JVMスレッドの制限?

    おかげで、 ガレン

  • +0

    私の疑問は、Linux用の最新のサーバーJVMがこれをかなり悪用できることです(ただし、アプリケーションレベルのボトルネックはないと考えられます)。 – antlersoft

    答えて

    8

    単一のインスタンスは、しかし、NUMA領域は、GCのように物事が他の地域でひどくメモリアクセスを行うことを意味し、すべてのメモリをアクセスもしようとすることができます。これは高速化しており、JVMにはNUMAサポートがいくつかありますが、スケーラビリティが必要な場合は改善する必要があります。それでも、この問題がなければ、256 MBのヒープを取得し、ネイティブ/ダイレクトメモリを700個使用することができます。 ;)

    最大の制限は、配列、コレクション、ByteBuffer(メモリマップファイル用)のサイズがすべて20億に制限されていることです。 (2^31-1)

    カスタムコレクションでこれらの問題を回避できますが、実際にはJavaがIMHOをサポートするはずです。

    BTW:Dell R910は、1 TBのメモリと24コア/ 48スレッドのUbuntuを40,000ポンドで購入できます。

    BTW:私は40GBまでのJVMの経験があります。

    1

    まず、Javaプログラムそのもの:設計が間違っているコードは、それほど多くのコンピュータ電源を使用しません。たとえば、実装されたスレッドがうまく実装されていないと、パフォーマンスが低下する可能性があります。

    OSも制限要因です。すべてのOSがその量のメモリを十分に処理できるわけではありません。

    OSはそれをサポートしているので、JVMはその量のメモリを処理できると思います。

    関連する問題