5

私は別の方法で同じ質問をしましたが、質問は閉じられました : https://stackoverflow.com/questions/7231460/java-64-bit-or-32-bit
)。

Solaris (SPARC) および Linux (RHEL 5.x) で 32 ビット サーバー JVM の境界を押し広げている顧客のために、製品を 64 ビット Java に移行することを検討していました。私たちのディレクターは、「数年前、64 ビットはまだ存在していませんでした。今はどうですか?」と尋ねました。

  1. 4 GB 境界を押し進めていない顧客の場合、64 ビット JVM を使用するとパフォーマンスの点で悪影響がありますか? はいの場合、いくらですか?私たちはたくさんのオブジェクトを作成します。(32 ビットと 64 ビットの JVM を同時にサポートしたくありません。できれば、どちらかまたはどちらかの状況です)。

  2. 4 GB 境界を押し進めている場合、JVM は 32 ビットのものと同じくらい安定していると期待できますか?

    • パフォーマンスは問題になりますか?はいの場合、いくらですか?多くのオブジェクトを作成します。
    • 新しい GC チューニング手法は何ですか?
    • プロファイラー: 64 ビット JVM アプリのプロファイリングには十分対応していますか?

更新 : それらのコメント投稿者と私の以前の質問を閉じた人たちに、私は今あなたの不安を理解していると信じています. 同時に、私が怠け者であるか、手がかりのないスーツであるという(間違った)仮定をした人もいると思います. 調査後、調査結果を掲載します。私に本当の指針を与えてくれたすべての人に感謝します。

4

3 に答える 3

5

テストはほとんど自分で行うことができるので、32/64 ビット JVM の使用経験に関する「実際の」回答を期待していると思います。

私は、銀行向けの金融アプリケーションを作成するチームの一員です。Windows での開発には 32 ビット JVM を使用し、ほとんどすべてのサーバー アプリケーションは 64 ビット JVM を実行する RHEL 上で実行されます。私たちはまともなマシンを使用しているので、パフォーマンスが問題になることはありませんでした (通常のサーバー マシンは、少なくとも 32 GiB RAM を備えた 32 コアの AMD ボックスを使用しています)。

さすがにポインタサイズの違いでヒープサイズ大きくなってしまうのですが、今回は4GiBから上限が上がったので気にならない程度です。私たちのアプリケーションは、多くのオブジェクトも作成します。VisualVM またはコマンド ライン ツールを使用して、アプリケーションを問題なくデバッグできます。GC 設定に関しては、デフォルト設定を使用し、実際に GC が問題を引き起こしていると判断した場合にのみ変更を試みます。アプリケーションが使用するよりもはるかに大きなヒープ サイズ (8GiB) を割り当てるのが一般的であり、1 日に 1 回大きな GC スイープが 1 回行われますが、これはかなり良いことです。

JDK 7 には、サーバー アプリケーションにより適したG1 ガベージ コレクターと呼ばれる新しい GC アルゴリズムがあると聞いたので、ぜひ試してみてください。

そうは言っても、最善の策は、可能な限り測定して(32ビットマシンと64ビットマシンでそれぞれ32 v / s 64ビットを使用して)、決定することです。参考までに、私たちの組織は、最近のほとんどのストックサーバーハードウェアが 64 ビットであり、4GiB が最新のサーバーアプリケーションに対してかなり制限的であることを考えると (少なくとも私たちのドメインでは)、64 ビット JVM を完全に推し進めています。

于 2011-08-30T05:39:09.283 に答える
2

Solaris(SPARC)およびLinux(RHEL 5.x)上の32ビットサーバーJVMの限界を押し広げているお客様のために、製品を64ビットJavaに移行することを検討していました。私たちのディレクターは、「数年前、64ビットは完全には存在していませんでした。今はどうですか?」と尋ねました。

Sunは、Windowsよりもはるかに長い間64ビットを実行してきました。Solaris 2.5(1995年にWindows 95がリリースされたのと同じ年)は、64ビットでは以前ほど信頼性がありませんでした。まだSunOS(32ビット)を使用している多くの人はその要点を理解しておらず、問題となるほど十分なメモリを備えたマシンはほとんどありません。Solaris 2.6(1997)では、64ビットプラットフォームへの最初の重要な移行が見られました。私は1999年(Solaris上)までJavaを真剣に使用していませんでした。その時点で、64ビットはすでに頭の中で確立されていました。

1)4 GBの境界を超えていないお客様の場合、64ビットJVMを使用すると、パフォーマンスの面で悪影響がありますか?はいの場合、いくらですか?

64ビットJVMには、2倍のサイズと2倍の数のレジスタがあります。たくさん使用longすると劇的な改善が見られますが、一般的なアプリケーションの場合、どちらの場合も違いは5〜10%です。

たくさんのオブジェクトを作成します。

これがあなたにとって問題として認識されていなければ、IMHOパフォーマンスはあなたにとってそれほど問題ではありませんでした。任意のプロファイラーを使用すると、CPUとメモリの使用量に関する2つのレポートがあります。多くの場合、メモリプロファイルを調べると、パフォーマンスに大きな違いが生じます。(下記参照)

(32ビットと64ビットのJVMを同時にサポートすることは望ましくありません。どちらかまたは状況であることが望ましいです)大きな違いがあるとは言えません。それぞれをサポートするオーバーヘッドは何だと思いますか。コードはまったく同じです。あなたの観点からすると、テストがわずかに増える可能性があります。2つのバージョンのJava6をサポートすることと大差ありません。

2)4 GBの境界を押し上げる人にとって、JVMは32ビットと同じくらい安定していると期待できますか?

1999年以来64ビットバージョンを使用しているので、32ビットを使用することで状況が改善された(メモリが限られているために悪化するだけだった)機会を思い出せません。

パフォーマンスが問題になりますか?はいの場合、いくらですか?たくさんのオブジェクトを作成します。

パフォーマンスが問題になる場合は、破棄するオブジェクトを減らします。

どのGCチューニング技術が新しいですか?

最大メモリサイズを大きく設定できます。それについてです。32 GB未満である限り、32ビット参照を使用するため、メモリ使用量が目立って増加することはありません。

私が行うことの1つは、新しいアプリケーション用にEdenサイズを8 GBに設定し、不要な場合はサイズを小さくすることです。これにより、GC時間を大幅に短縮できます。(1日1回程度まで;)これは32ビットJVMのオプションではありません。

プロファイラー:64ビットJVMアプリのプロファイリングには十分ですか?

VisualVMは純粋なJavaであり、AFAIKはまったく同じように機能します。YourKitはネイティブライブラリを使用しており、正しいバージョンを使用していることを確認する必要がある場合があります(通常はこれを設定しますが、環境を混乱させる場合は、エージェントの2つのバージョンがあることを知っておく必要があります)


パフォーマンスが心配な場合は、それほど多くのオブジェクトを作成しないでください。実際のアプリケーションでは、オブジェクトの作成がどれほど遅くなるかに驚くかもしれません。アプリケーションの速度が2倍から10倍以上遅くなる可能性があります。コードを最適化するとき、最初に行うことはオブジェクトの破棄を減らすことであり、少なくとも3倍のパフォーマンスの向上を期待しています。

比較すると、64ビットと32ビットを使用すると、5%〜10%の違いが生じる可能性があります。それは速くても遅くてもよく、両方とも同じように可能性があります。メモリの肥大化に関しては、最新のJVMを使用してください。これは、目立たない可能性があります。これは、32 GB未満のメモリを使用する場合、64ビットJVMがデフォルトで32ビット参照を使用するためです。ヘッダーのオーバーヘッドはまだわずかに高くなりますが、オンの場合、オブジェクトは64ビットではそれほど大きくありません-XX:+UseCompressedOops(最新リリースのデフォルト)。


Java:64ビットプログラミングのすべて

32ビットと64ビットのJVMを使用して一般的なオブジェクトのサイズをテストするJava:オブジェクトのサイズを取得する

たくさんのオブジェクトとリフレクションを作成するのと、何も作成せずに動的に生成されたコードを使用するのと同じことを行う極端な例。1000倍のパフォーマンスの向上。パフォーマンスを向上させるためのJavaシリアル化の回避

ヒープレスメモリを使用すると、GC時間を大幅に短縮できます。何百万もの要素のコレクションライブラリ

ヒープレスメモリを使用すると、アプリケーションが別のアプリケーションにデータを渡す代わりに、はるかに多くのメモリを使用できるようになります。サーバーアプリケーションは4 GBに制限する必要がありますか?

于 2011-08-30T06:49:13.210 に答える
1

あなたの質問には、あなたのアプリケーションに依存する非常に多くの側面があるため、他の人々のアプリケーションでの「現実世界」の経験は、ある程度の確実性で価値のあることを教えてくれる可能性は低いです.

私のアドバイスは、あなたの (そして私たちの) 時間を無駄にするのをやめて、32 ビット JVM の代わりに 64 ビット JVM を使用したときに何が起こるかを確認することです。とにかくテストを行う必要があります...

于 2011-08-30T06:53:05.863 に答える