2017-09-06 3 views
0

私は2つのファイルAとBがあり、データが両方とも(ストリームのように)連続して書き込まれている状況があります。Javaでユーザコントロールのキャッシュの退避/ガベージコレクションを行う方法は?

私は、ファイルAとファイルBの両方がメモリを競合していると知っています。ガベージコレクタは、どのファイルをどのページに置き換えるかを決定する予定です。

ガベージコレクタ優先ファイルA(ガベージコレクタは、常にAと比較してファイルBのページの追い出しを選択する必要があります)を設定して、ガベージコレクションを制御したいと考えています。他の可能性は、メモリにキャッシュするのではなく、ファイルBをディスクに強制的に書き込むことです。

これらはJavaで発生する可能性がありますか?

答えて

1

です。はい、ガベージコレクションはメモリ管理の一種ですが、「メモリ容量が少ないときにどのページのメモリがディスクにスワップアウトされるか」について議論するときは、ガベージコレクションではありません。 AおよびBファイル。ガベージコレクタは、オブジェクトへの参照がなくなるまで何もしません。

ガベージコレクションではなくメモリページスワッピングを制御したいとします。私はこれについて間違っていると私はコメントで訂正されると確信していますが、私はあなたがJavaのメモリのページが使用可能なメモリが少ないときにディスクにスワップされる制御することはできないと思う。

1

Javaに強制的にガベージコレクションを依頼することはできません。

しかし、System.gc()に電話して、JVMにガベージコレクションを要求することができます。

オブジェクトがガベージコレクションの準備が整っていることを確認するには、nullに割り当てることができます。こうすることで、ガベージコレクタが実行されたときにこのオブジェクトを取得し、ヒープから削除されることを確認できます。

0

Javaには自動ガベージコレクションがあり、使用中のオブジェクトと使用されていないオブジェクトを識別し、未使用のオブジェクトを削除します。

のJava内のガベージコレクションについての良いソースは、私はあなたがガベージコレクションとメモリ管理が混乱している疑いがあるhere

0

問題の説明には特定の詳細がありません。具体的には、ファイルへの書き込みが連続しているか、ランダムアクセスが関係していますか?

geneSummonsが正確に指摘するように、JVMのメモリ管理はオペレーティングシステムのものと混同しています。 sun.misc.Unsafeでさえ、JavaアプリケーションからOSレベルでのページング動作を制御することはできません。

あなたはかもしれません。はメモリマップファイルを使用していますが、あなたの書き込みにランダムアクセスを使用しているかどうかによって異なります。あなたがやっていることがすべて順番に書いているのなら、これはほとんど役に立たないでしょう。これは、OSレベルでファイルのページングを制御するわけではありませんが、問題を解決するためのより効率的な方法を提供する可能性があります。

この件に関する有用な記事があります。https://howtodoinjava.com/java-7/nio/java-nio-2-0-memory-mapped-files-mappedbytebuffer-tutorial/

関連する問題