JavaのWebプログラミングにおける仮想メモリ(Linuxファイルシステムのスワップ)を使用する方法

StackOverflow https://stackoverflow.com/questions/1506634

質問

私は、Java Webアプリケーションで動作します。いくつかのセクションでは、私は、メモリ(RAM)に保存し、持続非常に巨大なツリーの変数を使用します。私は、仮想メモリ(スワップ)にこれを移行することができます。 注意:巨大なツリーが提案Ajaxのテキスト・ボックスに、使用するすべてのユーザーの名前と電子メールを構成されています。

役に立ちましたか?

解決

JVMは、このようなタスクを実行するためにOSを求めての方法を持っていませんので、交換するためにメモリのブロックを強制的にLinuxでの標準的な方法はありません。

あなたは、この機能が必要な場合は、あなたができる最善のは、ツリーをシリアライズし、あなたはそれのために準備ができているときにそれを戻すディスク・ファイルに生データを書き込むことです。

しかし、ディスクへの書き込みがある[非常にの物理メモリ、I / Oと比較して遅いので、あなたはおそらく、これを望んでいない。

ポイントのケース、これについてOSの心配をしましょう。それはあなたが行うよりもメモリを管理するためのより良い方法を知っていると仮定しても安全です。

他のヒント

あなたのユーザーは、このの世話を使用しているOSをしてみましょう。

スワップのうち一部のページが死んでJavaの画像である

実行中のJava画像。すぐで熱心に十分なGCキックなど、あなたが戻ってのページのすべてを取得。中のページが十分に悪いです。あなたが実際に全体のことのために十分なRAMを持っていない場合は、サーバのスラッシング、応答しなく大破で終わります。ページングされたJavaが悪い(tm)のです。

あなたは全体のことのために十分なRAMを持っている場合、あなたはすべてのスワップを必要としません。

スタッフは、データベーステーブルへのあなたのリスト、ディスク、インデックスには、あなたの結果セットを制限し、それに対して適切なクエリを作ります。それは、ネットの勝利になるだろう、とあなたはそれについて考える必要はありませんので、DBは、それが最善の好きなページをキャッシュすることができます。

以上のRAMを取得します。

あなたのOSが自動的に独自のメモリを管理し、必要に応じてスワップファイルに物事をプッシュします。

あなたは多くのデータを持っている場合は、

は、代わりに巨大なメモリ内のツリーのデータベースにデータを格納し検討する必要があります。これはおそらく、あなたのアプリケーションの規模が良くできるようになる、それはまた、パフォーマンスを向上させること - それは確かにあなたがルックアップするか、レコードを変更する必要があるたびにディスクに構造全体を読み書きよりも優れた性能を与えるだろう。

編集:あなたは、必ずしも専用のデータベース・マシンをセットアップする必要はありません。あなたが現在今、メモリ内のすべてのデータを保存しようとしていることを考えると、あなたはおそらく HSQLDB またはのSQLite の16 GBと2TBのサイズ制限を有する、それぞれ

私は誰もが、ディスク上の項目を格納するとひどくひどくineficientであることを彼に言っていること、それが面白いと同時に、別のマシン上で...彼はデータベース、ディスク上のデータを保存するために起こっている、おそらくリモートいずれかを使用recomending ..

あなたは盲目的にスワップファイルを処理するとき、それは未来が保持していることを知っているコードの影響を受けてスワップファイルを持っているだろうよりも、システムをより効率的になることを想定しています。あなたが、システムがメモリ内のすべての項目を見て、効率的にそのファイルにそれのいくつかを置くしようとすることがあるよりも、しばらくの間、使用する予定がない知っているメモリを交換するために非常に効率的です。

もちろん、あなたがすべてのやや右にある間違っながら... LOCALデータベースは、(それが読み書きされます)ファイルにデータを格納する最も効率的な方法だろう。あなたは、ローカルデータベース、コード1へのアクセスを持っていない場合。ハッシュマップをメモリに格納するように設計されており、注文したインデックス化されたリンクリストは、ディスク上に格納されるように設計されています。両方の媒体の効率のためのいくつかを考慮せずにディスクにメモリから直接プッシュしようとすることは有効ではない。

どのように同じ問題に別のテイクのように、このことについて:私は、PDFファイルのサーバ側の多くを作成していて、私は月のと同時に、一般的にレポートを実行するクライアント1000年代の10代を持っています。平均PDFサイズは7-10Mbかもしれません。利用できる有限のヒープを使用すると、一時ファイルへのアウトデータ「をスワップする」私がクライアントにPDFデータをストリーミングする前に、応答のコンテンツの長さを設定できるようにする必要がありますので、PDFを作成するための有効な方法です。

おそらくだけではなく、デザインに疑問のいくつかの有用なオプションが便利かもしれません。個人的に私は1つの一時プロセスごとのファイルまたは単一の「スワップ」ファイルの同時アクセスのいずれかを使用して見ています。

あなたは何を示唆するのでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top