JVM に OS に特定のオブジェクトをスワップ スペースにプッシュしないように指示することは可能ですか?
7 に答える
短い答えはノーです。
Java では、何がスワップインされ、何が RAM に「固定」されるかを制御できません。
この種のことを心配することは、通常、プロジェクトに何か問題があることを示しています。OS は全体として、何をスワップする必要があり、何をスワップすべきでないかをより適切に判断します。あなたの仕事は、基盤となる VM/OS が何をするのかを推測せずに、機能と優れた設計を提供することに集中できるように、ソフトウェアを作成することです。
この問題は Eclipse でも非常に顕著であり、KeepResident のダーティー ハック プラグイン ( http://suif.stanford.edu/pub/keepresident/ ) はそれを回避します。
それは始めるのに良い場所かもしれませんか?広く使用されているのを見たことがないので、おそらくこれは標準の Eclipse ディストリビューションに統合されていますか?
答えではありませんが、コメントするポイントが不足しているため、このオプションを予約します:)
スワップに情報を保存しない理由があります。パスワードやその他の機密情報は、ディスク上で永遠に使用してはなりません。また、週末に PC に戻ると、すぐに利用できるようにいくつかのことを記憶に留めておきたいと思います。
(Java 以外)ネイティブには、おそらく各/ほとんどのオペレーティング システムでこれを行う方法がいくつかあります。ウィンドウでは、これは間違いなく可能です。しかし、Java からそのままではありません (JNI を考えてください)。このオプションがどれほど絶望的であるかにもよりますが、ビデオ メモリまたはスワップ アウトしないその他のハードウェア デバイスの使用をいつでも検討できます。これにより、jogl などの標準的な Java API を使用して情報を保存することができます。しかし、どういうわけか、それがあなたが探している実装/結果と関連しているとは思えません。
短い答えは(上記のように)です:それをしないでください:-)。
ただし、原則として可能です。ほとんどの OS では、特定のメモリ領域がスワップされないように「ロック」できます(Linux ではmlock(2)、Windows では VirtualLock など)。
VM は、適切な API を介してこの機能を Java アプリケーションに公開できます。ただし、私が知っている VM はそうではないので、それを行うには、最初に VM を変更する必要があります...
定期的にアクセスすると、その時点でたまたまそこにあったページ (JVM がガベージ コレクション中に何かを移動する) は、他の何かがさらに積極的にメモリを要求しない限り、ページ アウトされません。しかし、JVM に別のページに移動しないように指示する方法はなく、OS はページについてしか認識していません。
基本的に、JVM 全体を常にメイン メモリに保持する必要があります。