Javaにオブジェクトをスワップスペースにプッシュしないように指示する
-
03-07-2019 - |
質問
JVMに、特定のオブジェクトがスワップ領域にプッシュされないことが望ましいとOSに示唆するように指示することは可能ですか?
解決
短い答えはノーです。
Javaでは、何がスワップインされ、何がRAMに「固定」されているかを制御することはできません。
この種のことを心配することは、通常、プロジェクトに何か他の問題があることを示しています。 OSは全体として、交換すべきものとすべきでないものを決定するためのはるかに良い仕事をします。あなたの仕事は、基礎となるVM / OSが何をするかを二度と推測しないようにソフトウェアを書くことであり、機能と優れたデザインの提供に集中するだけです。
他のヒント
この問題は、EclipseおよびKeepResidentダーティハックプラグインでも非常に顕著です( http:// suif.stanford.edu/pub/keepresident/ )はそれを回避します。
始めるには良い場所かもしれませんか?私はそれが広く使用されているのを見たことがないので、おそらくこれは標準のEclipseディストリビューションに統合されていますか?
ちょっと!マネージ言語でプログラミングしています。なぜこれらについて考えているのですか?これらを思いつかない場合は、いつでもCでプログラミングすることを選択できます。
簡単な答えは(上記のとおり):しないでください:-)。
ただし、原則としては可能です。ほとんどのOSでは、「ロック」を許可しています。特定のメモリ領域がスワップされない(例:Linuxでは mlock(2)、WindowsではVirtualLock )。
VMは、適切なAPIを介してこの機能をJavaアプリケーションに公開できます。ただし、私が知っているVMにはそれがありません。そのためには、まずVMを変更する必要があります...
定期的にアクセスする場合、その時点であるページ(ガベージコレクション中にJVMが移動するページ)は、他の何かがさらに積極的にメモリを要求しない限り、ページアウトされません。ただし、JVMに別のページに移動しないように指示する方法はなく、OSはページのみを認識します。
回答ではありませんが、コメントするポイントがありません。このオプションを予約します:)
スワップに情報を保存しない理由があります。パスワードなど、ディスク上で永遠に過ごすべきではない機密情報です。また、週末を過ぎてPCに戻ってきたら、すぐにメモリ内にあるものを利用できるようにしたいです。
(非Java)ネイティブには、各/ほとんどのオペレーティングシステムでこれを行う方法がおそらくあります。 Windowsでは、これは間違いなく可能です。しかし、Javaから直接ではありません(JNIを考えてください)。 このオプションがどれほど必死かによっては、ビデオメモリ、またはスワップアウトしない他のハードウェアデバイスの使用を常に見ることができます。これにより、joglのような標準的なJava APIを使用して情報を保存できます。しかし、どういうわけか、私はそれがあなたが探している実装/結果と関連していることを疑います。
基本的に、JVM全体を常にメインメモリに保持する必要があります。