2011-03-03 25 views
5

私たちはJavaで書かれたスイングアプリケーションを開発しています。これは約128MBのメモリしか必要とせず、短期間には4GBのようにもっと多くのメモリを必要としません。これまでは、32ビットWindows用、32ビットLinux用、64ビットLinux用の3つの異なるリリースを常に提供しています(JREを含むインストーラを使用)。 32ビット版よりも約40〜50%多くのメモリを消費するため、64ビット版は2〜3週間前まで誰も使用しておらず、OutOfMemoryExceptionが報告されました。64ビットOS上の32ビットまたは64ビットアプリケーション?

私の質問では、アプリケーションが4GB以上のメモリを使用する必要がない場合は、64ビット版の64ビット版を提供する必要がありますか?私たちは、32ビット版が64ビット版Linuxでも動作することを明らかにしました。しかし私は私たちが持っていた短所が何であるか分かりません。パフォーマンスおよび/または互換性の問題?

+0

少し明確にしましょう:32ビットバージョンが使用しています最大128MBのメモリ、64ビット版の場合は192MBが必要な場合がありますので、追加の64ビットインストーラを作成する必要はありませんが、異なる設定を作成する必要があります。また、すべてのバージョンで192MBを使用すると、32ビットバージョンが現在最も頻繁に使用されているため、メモリリークが見えなくなる可能性があります。もう1つのことは、多くのアプリケーションがそのサーバーで実行できるため、メモリ消費量をできるだけ少なくすることです。 –

+0

64ビットJVMで32ビットの参照を使用する場合は、それ以上のメモリは必要ありません。 –

答えて

3

アプリケーションが64ビットホストオペレーティングシステムの改善を提供せず、32ビットリリースと互換性がある場合は、すぐにアプリケーションを提供する必要はありません。

しかし、すべての新しいシステムではないにしても、私が主張しているx64アーキテクチャーに基づいているわけではありませんが、64ビットソフトウェアは自然なデフォルトでなければなりません。このニーズは、ハードウェアレベルに近づくほど強くなります。一部の32ビットVPNクライアントをサポートするために仮想操作を実行することがいかに厄介であるかはわかりません。

64ビットクライアントを推奨すると、ダウンロード統計が優先される可能性があります。

2

ほとんどの32ビットのJVMを約1.2〜1.5ギガバイトに制限されているチェック。

アプリケーションが64ビットJVMでさらに多くのメモリを使用する場合は、-XX:+UseCompressedOopsを試してください。これは64ビットJVMに32ビットの参照を使用するように指示しますが、32GBのメモリにはまだアクセスできます。

1

私の質問では、アプリケーションが4GB以上のメモリを使用する必要がない場合は、64ビット版の64ビット版を提供する必要がありますか?

アプリケーションであまりメモリが必要ない場合は、64ビットインストーラ/ JVMは値を追加しません。それどころか、(あなたが観察したように)それは単により多くのメモリを使用し、その結果として(おそらく)実行が遅くなるため、貧弱な選択肢です。

(実際には、実際の制限は4GB以下になります。32ビットのアドレス空間のいくつかの部分があるため、ハードウェアアーキテクチャの問題により、使用できなくなります。)

私はあなたが64ビット版を撤回示唆が、ユーザーが個別にダウンロードしてインストールしたJVMを使用できるようにします。 (JREの組み込みコピーは、人々が最新のJVMセキュリティ修正を得るためにアップグレードするときに見逃される傾向があります...)